|   
	ICM Manual v.3.9
	by Ruben Abagyan,Eugene Raush and Max Totrov Copyright © 2025, Molsoft LLC
 Oct 13 2025
 
 | 
 [ add | alias | align | Append command | assign | break | build | call | center | clear | color | Color chemical | Color accessibility | Compare | compress | connect | continue | convert | copy | crypt | Date array | Delete | display | edit | elseif | endfor | endif | endmacro | Enumerate charge | Enumerate chiral | Enumerate tautomer | Enumerate library | endwhile | exit | find | fix | for | fork | fprintf | function | Global | goto | group | Gui | help | history | if | info | keep | join tables | Learn | Mlr | Learn ann | Link grob | Link group | Link variables | Link ms2ali | list | List binary | List database | list directory | list molcart | load | Macro | make | minimize | menu | modify | Modify rotate | Modify chem | montecarlo | move | pause | plot | Plot area | predict | print | Print bar | printf | print image | Query molcart | quit | randomize | read | rename | return | rotate | select | Set | show | sort | split | sprintf | store | ssearch | strip | superimpose | Superimpose minimize | Sys | test | then | transform | translate | undisplay | undisplay window | unfix | wait | web | while | write ] 
ICM commands have a certain structure:
 
they use command words from this list: 
 align assign build clear compare connect convert copy compress crypt
delete display edit enumerate exit exclude filter find fix fork fprintf group gui keep learn load
make menu minimize modify montecarlo move
pause plot predict print printf quit query randomize read redo refresh rename restore rotate
select set show sort split sprintf ssearch store strip superimpose
test transform translate undisplay undo unfix unselect unix wait write
alias antialias center color help history link list macro model sql web
 accessibility alignment amber angle area aselection atom axis
background ball base bar bfactor bond born boundary box
catalog cavity cell chain charge cmyk column command comment comp_matrix conf cpk csd cursor chemical cistrans
database distance directory disulfide dot drestraint
energy error evolution factor field filename font foreground frame function
gamess genome gradient grid grob hbond header html hydrogen
iarray icmdb idb image index info input integer intensity inverse iupac json kernel key label library logical loop limit
margin material map matrix memory merit mol mol2 moldb molcart molecule movie molsar
name nucleotide
object occupancy oracle origin output
page parray pattern peptide pipe pdb plane postscript potential preference preview problem profile project property prosite protein pharmacophore
rarray reaction real regression reflection residue resolution ring rgb ribbon regexp rainbow
sarray segment selection selftether separator sequence session site size skin slide salt solution stack stdin stdout stick
sstructure string surface symmetry system svariable
table term tether texture topology torsion trajectory transparent tree type unknown user
variable vector version view virtual volume vrestraint vselection water weight window wire xstick
 add all append auto auxiliary binary bold bw cartesian clash chiral dash exact join
fast fasta flat formal format full gcg gif global graphic heavy identity italic jpeg last
left local mmcif mmff msf mute new none nosort number off on only pca pir pmf png pseudo pov
reverse right similarity simple sln smiles smooth solid static stereo swiss targa tautomer underline unique wavefront xplor
the they arguments consisting of constants, named shell variables or expressions including functions, e.g. display ribbon Res(Sphere( a_H a_A 7.6 ))
the order of arguments of different data type is arbitrary
at the end of the command one may have a list of additional shell variables that will be redefined temporarily 
   only for the duration of this command, e.g.
 montecarlo v_//x*  mncalls=200 mncallsMC=20000 temperature=1000.  
several commands in one line can be separated by a semicolon
commands can return certain shell variables, like i_out , i_2out, r_out , l_out , s_out , R_out , as_out .. with useful output
to suppress command output redefine those shell variables:  l_info=no  or l_warn=no  (for some commands there is also a mute option )
 
 
 
 
 [ Add column | Add matrix | Add slide | Add table ] 
A family of commands adding things. Some commands use  append  syntax instead
It is also used as an option equivalent to append in write command.
 
 | add one or several columns or header elements to an existing table | 
 
 [ Add column function ] 
Adding a single column/header you may add a column (or columns) to an existing table T or create a new one if the specified name does not exist.
 
 add column T I|R|S|P|i|r|s [name= s [append|delete] ] [index= i_pos] [mute] [local]
 
 add header T I|R|S|P|i|r|s|M|etc [name= s [append|delete] ] [mute] [local]
 
(to add a row see add table args  )
 
Adding multiple column/headers  
 add column T I|R|S|P|i|r|s I|R|S|P|i|r|s .. [name= S  [append|delete]] [index= i_pos ] [mute] [local]
 
 add header T I|R|S|P|i|r|s|M|etc I|R|S|P|i|r|s|M|etc .. [name= S .. ] [index= i_pos ] [mute] [local]
 
this command adds one or several columns to an existing table in the i_pos column
(in other words if you want you column to be in the 2nd position, specify 2 as an argument). 
The columns are append to the end of the table by default.
If the table does not exist the command will create a new table. 
 
It an integer, string, or real are specified as an argument instead of a column-array, this 
value is multipled to create a column of the appropriate size.
 
Options: 
append: if the name option is specified prevents overwriting the column with the same name, instead modifies the provided name (e.g. 'A' -> 'A_1' )
delete: if the name option is specified overwrites the column with the same name. Without delete (default) it will be overwritten only if the data type is the same.
mute  : The mute option suppresses the info (equivalent to temporarily setting l_info=no ).
local : for use in macros ans shell functions: allows for local tables independent from tables with the same name at higher levels.
 
Examples:
 
 
add column t {1 2 3} # create a new table
add header t "A new table" name="title" # add a string to the header section
add column t {"a","b","c"} name="AA" # column AA is appended
add column t {"x","y","z"} index = 2 
# adding a chemical array
add column t Parray({"CC","CC(O)=O","CCO"} smiles) name = "mol" index = 1
# adding multiple arrays
add column t {1 2 3} {3 2 1} {"a","b","c"} Parray({"CC","CC(O)=O","CCO"} smiles) name={"A","B","C","mol"}
t
 #>T t
 #>-A-----------B-----------C-----------mol--------
    1           3           a          "CC"
    2           2           b          "CC(O)=O"
    3           1           c          "CCO"
The columns can also be functions, e.g.
 
add column t {1. 2. 3.} {2 3 4}
add column t function="A+B" name="AplusB"
add column t function="Log(A,10)" name="log10A"
Use add column inside a macro:
 
macro ResAreas  rs_sel 
  rs_sel = Res( rs_sel & a_*.!W )
  show surface area Mol(rs_sel) Mol(rs_sel)
  add column t Name(Res(rs_sel) full) Area(Res(rs_sel)) Area( a_1.A/A )/Area( a_1.A/A type) local name={"sel","area","rel_area"}
  set format t.sel "<!--icmscript name=\"1\"\ndisplay xstick %1\ncolor xstick cpk %1 & a_*.//c* green\ndisplay residue label %1\n\n\n--><a href=#_>%1</a>"
  if(Type(resAreas)!="unknown") delete resAreas
  rename t "resAreas"
  keep resAreas
endmacro
See also: move column , add column function
 
 | Add columns using internal functions in dynamic or static manner | 
 
 
 add column T function=s_expression [static] [name=s] [index= i_pos]
 
By default the column is added in a dynamic manner so that it can be recalculated from other columns. Option static adds the new column as a value and will not allow for the recalculation.
Adds a column a string that contains an expression or a reference to one of three sources of functions: 
 
one of a few fast-access internal functions listed below, e.g. function="Sqrt"
one of a thousand built-in ICM-shell functions (described in this manual), e.g. function="Icm::Min(COL)"
an arbitrary user-defined ICM-shell function loaded from a file or  ~.icm/user_startup.icm  file. E.g. function="myfunc(A)"
 
 which may contain operations with other columns in the same table.
The generating expression information is attached to the column,
which allows one to recalculate the values in the column using the same expression. 
The following functions are supported:
 
Basic arithmetical operations on columns are supported, examples: 
 
add column t {1. 2. 3.} {1. 2. 3.}
add column t function="A+B" name="C"
add column t function="A-B" name="D"
add column t function="A*B" name="E"
add column t function="A/B" name="F"
add column t function="A**0.5 + B**0.5" name="G"
build column t
show t
The following mathematical and data conversion functions are supported:
 Ceil, Floor, Log,  Sqrt, Sign, String, Power
Examples: 
add column t {1. 2. 3.} {1. 2. 3.}
add column t function="Sqrt(A)" name="C"
Chemical functionsThe following internal functions (not ICM-shell functions) are allowed in function=".."  expressions (eg add column t function="MolPSA(mol)":
 
Examples of chemical functions usage:
 
add column t Chemical("CCO"//"CCCCO"//"CCCC#N")
add column t function="Nof_Atoms(mol,'*')" name="nof1"  # all atoms
add column t function="Nof_Atoms(mol,'[!H]')" name="nof2" 
add column t function="Nof_Atoms(mol,'[C,O]')" name="nof3" 
add column t function="Nof_Atoms(mol,'[H]')" name="nof4" 
add column t function="MolWeight(mol)" name="molWeight"
add column t function="MolLogP(mol)"   name="molLogP"
add column t function="MolLogS(mol)"   name="molLogS"
add column t function="MolPSA(mol)"    name="molPSA"
add column t function="MolVolume(mol)" name="molVolume"
add column t function="MoldHf(mol)"    name="moldHf"
add column t function="calcBBBScore(mol)" index=2 name="bbbScore" append vector   
add column t function="MolSynth(mol)" index=2 name="molSynth" append vector   
User-defined functions 
A user can defined custom function to be used in column formula expression directly : function="userFunctionName(columnArgument)"
 
Example:
 
function ligStrain( P_chem )  # returns strain for a given 3D chemical
  vwMethod = "exact"
  dielConst = 2.
  read mol P_chem name="LIGSTRAIN"
  build hydrogen
  set type charge mmff
  convert auto 
  minimize cartesian "mmff" mncalls=1
  newE = Energy("ener")
  minimize cartesian "mmff" 5000
  baseE = Energy("ener")
  r_ligandStrain = newE - baseE
  delete a_
  return r_ligandStrain
endfunction
# assumes that t_3D exists and contains 3D chemicals in the mol column
add column t_3D function="ligStrain(mol)" name="strain"   # strain for every row in the table
ICM built-in shell functions. 
ICM build-in functions can also be used in the expression with "Icm::" prefix.
 
Example:
 
add column drugs function = "Icm::Sum(Icm::Unique(Icm::Sort(Icm::Sarray(A.dosages.dosage:route))),',')" name="route"
 
Recalculating.To recalculate use the build column column_name  command.
 
Examples:
 
add column T Chemical( {"c1(c(nc(N)nc1O)O)N", "c1c[nH]c2C(N=C(N)Nc12)=O"} ) name="mol"
add column T function="MolWeight(mol)" name="MW"
add T # add new row
T.mol[3] = Chemical("CC")
#
build column T.MW # recalculate mol. weights, setting the value for the new row
add column T2 {1 2 3} {4 5 6}
add column T2 function= "A+B"  # sum of two columns
See also: build column to update values,  Parray ( X [ s_func ] ) to add a fixed column
 
 | Adding real arrays as matrix rows | 
 
 
 add matrix [ M ] R|M2
 
adds a matching row R or a matrix with the matching number of columns to matrix M, by stacking extra rows at the bottom. If the matrix does not exist it is created
with the default name (the name is returned in s_out )
Example:
 
add matrix M {1. 2.} # creates new matrix M
add matrix M {3. 3.} # adds a row
show M
 #>M M
 1. 2. 
 3. 3.
add matrix M Matrix(2) # adds two rows
Note that to extend the matrix horizontally (adding columns) can be done with the double-slash operator ( M1 // M2 ).
 | add slide to a slideshow. | 
 
 
 add slide [i_posInCurrentSlideshow] [s_slideTitle] [comment = s_slideComment] [ display= "-option|-option2" ]
 
adds a slide to the slideshow table. 
This table contains one parray, called slideshow.slides . 
If the slide position is not specified the slide will be added to the end.
Alternatively, it will be inserted after the specified i_posInCurrentSlideshow 
Normally the slide is saved with window layout, and graphical parameters. Those can be ignored if you add the display="-option" flag (all listed properties are 'on' by default). 
 
  "-layout"    # ignores the window/panel layout
  "-smooth"    # ignores smooth view transitions between slides
  "-add"       # do not overwrite the previous slide views, just add to it 
  "-gf"        # ignore graphical representations, inherit them
  "-color"     # ignore colors , inherit them
  "-labeloffs" # do not display labels
  "-viewpoint" # ignore viewpoint changes
  "-graphopt"  # 
  "-mol"       # do not display the chem-table window
  "-grob"      # do not display grobs
  "-map"       # do not display maps
  "-all"       # switches off all the above properties
 
Example:
 
build string "ala ala ala"
display ribbon a_ 
display xstick a_/12,13 magenta
add slide "My View" comment = "Two magenta residues" display="-layout" 
undisplay # hide all
# wait..
display slide "My View" # bring it back
 
See also: display slide , Slide
 
 | Add / insert table rows. Append tables. | 
 add T_1 [ i_RowNumber ]  [ T_2 | row_selection | number=i_nofRows ] [ simple ]
 add/insert rows (or another table with the same coloumns) 
to table T_1 at the target row position i_RowNumber . 
Use 1 (one) if you need to insert the first line. 
If the second table or selection is not provided, the command adds an empty row. In this case you can add number option 
to specify the number of rows to add/insert.
The row_selection can contain rows from the same table or from a different table 
with a matching column structure. 
In the latter case, the columns may be matched by their names regardless of column order. 
Default values are inserted for all absent columns.
The defaults for an empty line are empty string or zero value for strings or numbers, respectively. 
The target position will then
correspond to the index of the first inserted row.
 
simple option toggle column matching order 'by position' instead of default 'by name'.
 
From version 3.6-1e the add tableName command also returns the current row as i_out .
 
 Examples:
  
group table t {1 2 3} "a" {"b","d","e"} "b" 
show t 
 #>T t 
 #>-a-----------b---------- 
    1           b 
    2           d 
    3           e 
 
add t 1 # insert empty line before 1st  
show t 
 #>T t 
 #>-a-----------b---------- 
    0           ""  
    1           b 
    2           d 
    3           e 
 
group table t {1 2 3} "a" {"b","d","e"} "b" # recreate the table 
add t 3 t[1]  # insert a duplicate of 1st row after the 2nd  
show t
 #>T t 
 #>-a-----------b---------- 
    1           b 
    2           d 
    1           b 
    3           e 
 
group table t {1 2 3}  "a"  {"b","d","e"} "b"  # recreate the table 
group table tt {1 2 3} "c" {"b","d","e"} "b" {4 5 6} "a" # another table 
# order is diffferent, extra column present  
add t 3 tt[1:2]  # or add t 3 tt.aa<3  
show t 
 #>T t 
 #>-a-----------b---------- 
    1           b 
    2           d 
    4           b 
    5           d 
    3           e 
 
 alias abbreviation word1 word2 ...
 create alias
 alias delete  abbreviation
 delete alias
 It is important that the abbreviation is not used in the ICM-shell. 
The same names can not be given later to ICM-shell objects.
 Alias may contain arguments $0, $1, $2, etc. ICM-shell will pick space-separated words   
following the alias name and substitute $1, $2, etc. arguments by the specified argument. 
$0 stands for all the arguments after the alias name.
 Examples:
  
 alias seq sequence                    # seq will invoke sequence  
 alias delete seq                      # delete alias name seq  
 alias dsb display a_//ca,c,n          # abbreviate several words to  
                                       # reduce typing efforts  
                                       # aliases with arguments  
 alias NORM ($1-Mean($1))/Rmsd($1) 
 show NORM {6,7,8,4,6,5,6,7,5,6}       # make sure there is no space 
 
 
 [ Align number chemical | Align res numbers | Align sequence | Align fragments | Align 3D | Align 3D heavy ] 
 
 | align number chemical: canonically rename atoms in hetero molecules | 
 
 
 align number chemical  ms_het_molecules
 
Examples:
 
 
read pdb "3gvu"
align number chemical a_H.  # rename atoms in both ligands 
 
 | align number: renumber residues sequentially | 
 align number rs_residuesToBeRenumbered  i_first|s|I|S  [molecule]
 align number  ms_chainsToBeRenumbered [  i_firstNumber ]
 renumber selected residues, or residues in selected molecules or objects sequentially in 
all of them from starting one or the specified first number. 
May be useful to deal with messy numbering in some pdb-files. 
Option molecule will start numbers from 1 or i_first in each molecule.
Chain ids are also allowed, e.g. set number a_/13 "13A".
Multiple residues can be set with integer or string arrays of labels.
If integer array contains the same numbers, e.g. 10,10,10 the labels will get
the insertion characters, e.g. 10,10A,10B .
 
Examples:
  
 read pdb "1crn" 
 align number a_1            # renumber all res. 1 to N 
 align number a_1/10:20 101  # just the selected residues from 101 
 align number a_1       101  # renumber all res. 101 to 100+N 
 read pdb "2ins"
 align number a_/* 1
 align number a_/* 1 molecule # each chain starts from 1
 align number  ms_chainsToBeRenumbered seq_master [ i_offset ]  
  
renumber the residues of the selected molecule according to seq_master  
master sequence which is aligned to the sequence of the selected chain. 
The alignment (pairwise or multiple) need to be  linked  
to the molecule/chain and both the chain sequence and the master sequence 
need to be covered by the alignment.  The molecular sequence can be generated with 
the make sequence [ ms_chainsToBeRenumbered ] command.
 This command may be useful in cases in which a structural model does not represent 
the entire sequence because of omitted loops, N- and C- termini, while you still want to  
keep the numbering according to the full master sequence.  
You might want to use the command also on models by homology generated with the 
 build model command.
 Example:
  
 seqmaster = Sequence("ACDEFGHIKLMNPQRST") 
 build string   "DEFGH-----PQRST"  # dashes are skipped    
 make sequence a_1 name="seqmodel"   # sequence is auto-linked 
 a = Align(seqmodel,seqmaster)       # linked alignment 
 align number a_1 seqmaster 
 # Info> residues of a_def.m renumbered by sequence 'seqmaster' from alignment 'a'    
 display residue label  
 
 | align: ICM multiple alignment algorithm | 
 align ali_SequenceGroupName [ tree=|filename= s_epsFileName ]
 
 align sequence [selection] | seq1 seq2 .. | seedSequence [ min_seqID (20.)] [ name=s ]
 make a multiple alignment of specified sequences.
The sequence group may result from the group sequence s_groupName command. 
The input arguments include the following:
 
seq1 seq2 ...   : explicitly specified
sequence : all sequences in the shell
sequence selection : all sequences selected in GUI
seqGroup  : sequences grouped together previously
seedSequence : sequences in the shell similar to the specified with optional min_seqID (default 20%).
 
For pairwise alignment use the Align( seq1 seq2 ) function. 
The algorithm includes the following steps  
(inspired by corridor discussions with  Des Higgins,  Toby Gibson and Julie Thompson 
): 
  
 
align all sequence pairs with the ICM  ZEGA algorithm,  
and calculate pairwise distances between 
each pair of aligned sequence with the Dayhoff formula, e.g. the distance between  
two identical sequences will be 0. , while the distance between two 30% different sequences  
will be around 0.5. The distance goes to an arbitrary number of 10. for completely 
unrelated sequences. The distance matrix Dij can later be extracted from the alignment with 
the Distance( ali_ ) function. 
 
build an evolutionary tree from Dij with the "neighbor-joining algorithm" of 
  Saitou, N., Nei, M. (1987) 
to determine the order of the alignment and calculate relative weights 
of sequences and profiles from the branch lengths. 
The tree will be saved in the file defined by the tree= s or filename= s option  . Starting from version 3.5-2 the aligTree.eps file is NO LONGER saved by default). The so-called  
 Newick tree 
 description 
 string will be saved in 
 s_out . 
 
traverse the tree from top to bottom, aligning the closest 
sequences, sequence and profile or two profiles. After each 
Needleman and Wunsch alignment, build the profile. 
 
generate the final neighbor-joining evolutionary tree and write the 
PostScript file with the tree to disk. 
 Examples:
  
   read sequences s_icmhome+"zincFing"  
   list sequences               # see them, then ...  
   group sequence alZnFing      # group them, then ...  
   align alZnFing               # align them
   align alZnFing filename="znTree.eps"  # eps file with a tree
 
  
  read sequence swiss web "12S1_ARATH"
  read sequence swiss web "12S2_ARATH"
  group sequence arath
  align arath
 
 
 
 
 | EST,DNA alignment and assembly | 
 
 [ sim4 ]align new ali_sequenceGroup [ seq_seed ] multiple alignment of ESTs and genomic DNA and consensus derivation.  
This command uses the external the sim4 program to generate pairwise alignments between expressed DNA sequence  
and a genomic sequence.  
The  
program can be downloaded from the 
http://globin.cse.psu.edu/globin/html/docs/sim4.html 
site.
 | The procedure has the following steps:  
 sequences are sorted by length 
 the longest sequence is chosen as the seed sequence unless it is explicitly  
provided 
 the longest sequence  from the remaining set is aligned to the seed sequence 
using the external sim4 program. 
 the output of this program is parsed and translated into the icm alignment 
 the consensus sequence is created and becomes the master sequence 
 the procedure is repeated until all the sequences are processed 
 the multiple sequence alignment is further cleaned to compress spurious 
gaps when possible. This cleaning makes the consensus much more compact. 
 The result of this command is best displayed with the 
 show color ali_  command.
 
 |   | 
 An example:
  
 read sequence "http://www.ncbi.nlm.nih.gov/UniGene/" + \ 
     "download.cgi?ID=5198&ORG=HsLINE=1" # 
 read sequence "../Hs5198" 
 group sequence unique u # squeeze out obvious redundancies and form group 'u' 
 align new u             # form multiple alignment and build consensus 
 show color u 
See also:
 
 
 | align two molecules by their backbone topology | 
 align [ distance ] ms_1 ms_2 [ i_windowSize (15) ] [ r_seqWeight (0.5) ]
 
 
 | This command finds the residue alignment (or residue-to-residue correspondence) for   
two arbitrary molecules having superposable parts of the backbone conformations. 
The structural alignment identification and optimal superposition is primarily 
based on the C-alpha-atom coordinates, but the sequence information 
can be added with a certain weight (the default value of  
 r_seqWeight is 0.5 which was found optimal on a benchmark). 
The structural alignment algorithm is based on the  
ZEGA (zero-end-gap-alignment) dynamic programming procedure in which   
substitution scores for each i,j-pair of residues contain two terms: | 
   | 
  
structural similarity in a i_windowSize window between 
two fragments surrounding residues i and j, respectively. This 
similarity is calculated as local Rmsd of the residue label atoms  
(these atoms are C-alpha atoms by default but can be reset to other atoms with the 
 set label command, e.g.  set label a_*.//cb  ). 
If the option distance is specified the deviation of the interatomic distances between 
equivalent pairs of atoms (so called distance rmsd ) is calculated instead  
of a more traditional root-mean square deviation between atom coordinates of equivalent atoms.  
The latter method is less accurate but an order of magnitude faster. 
 
sequence similarity (if r_seqWeight > 0.). 
Average local sequence alignment score in the i_windowSize 
window is calculated for i,j-centered pair of fragments. 
In this sense this sequence similarity is different from the one used in pure 
sequence alignment (see the 
 Align function), in which just the i,j 
residue pair is evaluated. The default value of r_seqWeight 
of 0.5 is rather mild (about a half of the structural signal). 
 The output:
  
 
 ali_out contains structural alignment (if sequences  
linked to the molecules do not exist, they will be created on the fly). 
The alignment can be further edited with the interactive alignment 
 alignment editor. 
 
 
 as_out contains the  residue selection of the aligned residues in the first molecule 
 
 
 as2_out contains the  residue selection of the aligned residues in the second molecule 
 
 
 M_out , the matrix of local structural/sequence similarity in a window 
is retained and can be visualized by: 
r_2out the result RMSD
 
Example:
  
read pdb "1ql6"
read pdb "2phk"
align a_1ql6. a_2phk.
make grob color 10.*M_out name="g_mat # x,y,z scales 
display g_mat 
# or 
plot area M_out display grid link 
 See also:
  
The overall result of the  align command is equivalent to: 
 Align( seq_1 seq_2 distance|superimpose ).  
This function creates the first unrefined structural alignment as described above.  
 
 find alignment which refines initial structural 
alignment. 
 
  
  a = Align(... superimpose )  # superposition/RMSD based local str. alignment 
  a = Align(... distance    )  # distance RMSD based local str. alignment 
 
  find a superimpose 4.0 0.5 
 Example:
  
  read pdb "1brl" 
  read pdb "1nfp" 
  rm a_*.!A 
  display a_*.//ca,c,n 
  color molecule a_*. 
  align a_2.1 a_1.1 
  center 
  show String(as_out) String(as2_out) 
  color red as_out 
  color blue as2_out 
  show ali_out 
 
 
 | align heavy command for multiple alternative structural alignments. | 
 align heavy rs_1 rs_2 [ r_rmsd ] [ i_windowSize [ i_minFragment]] [ r_elongationWeight]
 This method, as opposed to the default  
 align ms_1 ms_2  generates many possible solutions and 
does not depend on sequential order of the secondary structure elements.  
However, it leads to a combinatorial explosion and is intrinsically less 
stable computationally, and generally requires more time. 
The command finds the optimal 3D superposition between  
two arbitrary molecules/fragments 
(two residue selections rs_1 and rs_2 ).
 The procedure generates structural fragments of certain initial length and 
superimposes all of them to calculate the structural similarity distance. 
Then the "islands" of similarity are merged into larger pieces.  
 This process is controlled by the following arguments: 
 i_windowSize	 is the residue length of structural fragments for the initial fragment superposition. 
Fragment pairs with the rms deviation less than r_rmsd are then combined,  
giving composite solutions of total residue length larger than i_minFragment. 
Acceptance or rejection of the composite solutions is governed by the following score 
(the smaller, the better)
 score = rmsd - (1.37 + Sqrt(1.16 * length - 15.1)), length >= 14
 If length > 14 , we use linear extrapolation of the score dependence:
 score = rmsd - (1.37 + 1.068*(length-13))
 The score is required to be less than r_rmsd. Practically, for longer fragments one 
can find much larger RMS deviations according to the length correction of the score.
 Defaults:
  
There may be several different reasonable solutions. 
All the solutions are sorted, shown and stored in the memory. 
The two output selections as_out and as2_out 
contain the best scoring solution. Any solution can be 
 loaded and displayed. 
Additionally, a residue alignment is created for each solution. 
The decision about which residues are aligned is based on the overall score described above  
for the of combined fragments.r_rmsd = 1. A 
i_windowSize = 15 residues 
i_minFragment = i_windowSize 
r_elongationWeight=0.1 
 See also: 
  How to optimally superimpose without the residue alignment
 Example:
  
 read pdb "4fxc" 
 read pdb "1ubq" 
 display a_*.//ca,c,n 
 color molecule a_*. 
 align heavy a_1.1 a_2.1 12 1.5 .1 
 center 
 load solution 2            # load the second best solution 
 color red  as_out 
 color blue as2_out 
 for i=1,10 
   load solution i 
   color molecule a_*. 
   color red  as_out 
   color blue as2_out 
   pause                     # rotate and hit 'return' 
 
 endfor 
Note. Increase i_minFragment parameter (12 in the above example) 
to something like 20 if the program hangs for too long. Interrupt execution with the 
ICM-interrupt (Ctrl \) if you want only the top solutions. 
 
 
 
 [ Append sequence | Append stack | Append column ]There is a family of commands starting with the append keyword.
They are usually used to add sub-elements to a compound object like an alignment or a stack.
In many cases ICM uses add syntax instead of append. 
 | Appending sequences to a sequence group or an alignment | 
 append ali_seqGroup seq_1 seq_2 .. .
 appends sequences to a sequence group. This may be required if you 
formed a sequence group for future alignment or filtering/compression  
and you want to append additional sequences to it.
 
Examples:
  
read sequence group "bunch.seq" name="xx" # group xx is formed 
append xx my_seq  # appending your sequence to xx 
group xx unique   # filter out identical ones 
align xx 
 
 
read sequence swiss web "12S1_ARATH" 
read sequence swiss web "12S2_ARATH"
group sequence name="arath"
read sequence swiss web "14310_ARATH"
append arath 14310_ARATH
align arath
 
 | Appending a molecule or a ligand stack to an existing stack | 
 
 
 append stack s_ligandStackFileName [i_maxConf]
 
 append stack os_ligandObject 
 
this command takes a stack which corresponds to a receptor object and appends each conformation 
in the stack with a conformation of the ligand. 
If the ligand conformation can be taken from either from a stack file, this command will combine
each conf from the main stack with all conformations from the file. The i_maxConf argument
will set the limit on how many conformations are taken from the ligand stack (i.e. 
  append stack "lig.cnf" 1  will combine only the first conformation of the ligand )
 
If the second argument is an ICM object, each conf of the current stack will be extended with
the variables from the ligand. Now the ligand object can be appended to the receptor object
with the move command and the new combined object can use the expanded stack.
 
 
build string "ACDEF"  # the "ligand" peptide
rename a_ "Lig"
translate a_ {10. 0. 0.} # shift not to overlap with a_Rec.
montecarlo v_//!?vt*     # created Lig.cnf stack
build string "RSTVW"  # the "receptor" peptide
rename a_ "Rec"
montecarlo v_//!?vt*     # created Rec.cnf stack
move a_1. a_2.    # ligand must be the 1st argument
append stack "Lig.cnf" 4 # combine up to 4 best ligand confs
minimize stack    # minimizes each stack conf
load conf 1       # check them out
 | append two tables via two columns with matching values | 
 append t1.A t2.B
 Append rows of table t2 to table t1 by rows corresponding to unique column t2.B . 
The t1.A column values do not need to be unique.
 
  
group table people {"J","C","M"} "p" {"MS","MS","MS"} "orgid" 
group table orgs  {"MS"} "id" {"Molsoft"} "name" 
append people.orgid orgs.id 
people 
 #>T people 
 #>-p-----------orgid-------name------- 
    J           MS          Molsoft 
    C           MS          Molsoft 
    M           MS          Molsoft 
This command is a particular case of a more general join command.
 
See also the add table command for adding rows from a column with identical column structure (e.g.
 add t tt ).
 
 
 [ Assign sstructure | assign sstructure segment ] | assign sstructure: derive secondary structure from a pattern of hydrogen bonds | 
 
 
 assign sstructure rs [{ s_SecondaryStructTypeCharacter |  s_SSstring }] 
 Manual assignment of a desired secondary structure annotation to a residue fragment
 
 assign sstructure rs { s_SecondaryStructTypeCharacter |  s_SSstring } 
 assign specified secondary structure to the selected residues rs_ , e.g.
  
 read pdb "1crn" 
 assign sstructure a_/* "_"  # make everything look like a coil 
 cool a_ 
 assign sstructure a_/1:10 "HHHH_EEEEE"   
 cool a_ 
 
 |   | This command does not change the geometry of the model, it only formally 
assigns secondary structure symbols to residues.
 Note: to change the conformation of the selected residue fragment, 
according to a desired secondary string, use the ICM -object and  
the set command applied to both sequences and molecular objects.
 | 
 Automated derivation and assignment of secondary structure from atomic coordinates
 assign sstructure rs
 If the secondary structure string is not specified, apply ICM modification of the  
DSSP algorithm of automatic secondary structure assignment (Kabsch and Sander, 1983)  
based on the observed pattern of hydrogen bonds in a three dimensional structure.
 The DSSP algorithm in its original form overassigns the helical regions. For example, 
in the structure of T4 lysozyme (PDB code 103l ) DSSP assigns to one helix 
the whole region a_/93:112 which actually consists of two helices a_/93:105 and 
a_/108:112 forming a sharp angle of 64 degrees. ICM employs a modified algorithm 
which patches the above problem of the original DSSP algorithm.  
Assigned secondary structure types are the following: 
"H" - alpha helix, "G" - 3/10 helix, "I" - pi helix, 
"E" - beta strand, "B" - beta-bridge,  "_" or "C" - coil.
 Examples:
  
 nice "1est"       # notice that many loops look like beta-strands 
 assign sstructure # now the problem is fixed 
 cool a_ 
 See the  
 set rs_ s_SecStructPattern  
command to actually set new phi, psi angles to a peptide backbone according to the 
string of secondary structure.
 
 
 | assign sstructure segment | 
 
 
 assign sstructure segment [ ms_molecules ]   # ms_ICMmoleculesPreferable
 create simplified description of protein topology (referred to as segment 
representation). Segments shorter than segMinLength are ignored. 
The current object is the default. 
This command will work both on un converted pdb files as well as the pdb files.
However the resulting secondary structure will be BETTER when the structure is converted and
hydrogens are added.
 See also 
 show segment, 
 ribbonStyle, 
 display ribbon. 
 convert
 convertObject
 
 
 
 [ assign residue ]is one of the ICM flow control statements.   
It permits a  loop ( e.g. for or while )  
to be broken before calculations have completed. Examples:
  
   for i = 1, 8 
     print "Now i = ", i, "and it goes up" 
     if (i == 4) then 
       print "... but at i=4 it breaks, Ouch!" 
       break 
     endif 
  endfor 
See also 
 goto .
 
 
 
Assigns residue structure to a peptide or a protein. Sometimes when you read a peptide or protein from MOL or MOL2 with
no residue information present it is treated as a single residue small molecule. This command allows to restore residue layer.
 
 assign residue os1
 
Example:
 
build string "EACARVAAACEAAARQ"
read mol Chemical( a_ exact hydrogen )  name="xxx"  # read it as a single residue small molecule
assign residue a_   # restore residue structure
Sequence( a_1. )
Sequence( a_2. )
 
 
 
 [ Build atom | Build column | Build conf | Build sequence | Build string | build tautomer | Build model | Build loop | Build smiles | Build hydrogen | Build molcart ]The build family of functions allows one to create molecular objects  
 
It also  
adds implied hydrogens ( build hydrogen ) to a molecule 
and to find a loop in a database ( build loop), and generates low energy conformations for small molecules ( build conf ). 
 | build one atom and rebuild hydrogens | 
 
 
 build atom as1 [simple] [s_elementName=("c")] [i_bondType=(1)] 
 
 build pseudo as_inICMobj
 by default it will add a carbon to the selected atom in a non-ICM object
and rebuild hydrogens for the affected atoms.
Use the strip command for ICM objects.
 
Options and arguments:
 
simple does not rebuild hydrogens.
s_elementName is a string with the name of the chemical element. 
i_bondType is 1 for a single bond (the default), 2 for a double bond and 4 for a triple bond.
 
Example:
 
build smiles "CC(C)Cc1ccc(cc1)C(C)C([O-])=O" name="ibuprofen"
strip a_ibuprofen.
build atom a_ibuprofen.m//c1 "n"
build atom a_ibuprofen.m//c1 2
 
See also:
 
 | Recalculating dependent columns | 
 
 
 build column T.col|T
 
Rebuilds all values in a dependent column T.col 
 build column T | T_row_selection
 
Rebuilds all dependent columns in the table T_ or row selection (e.g. T[12], or
 T.ID==123 )
If column A depends on column B and column B depends on other columns, 
column B will be calculated before column A.
 
Examples:
 
add column T {2 5 1} name="B"
add column T function="A + B" name="C"
add column T function="C + B" index=1 name="D"
T.A[1] = 10
build column T[1] # should change values of C and D in the first row
See also: add column function
 
 | Generating low energy conformations for small molecules. | 
 
 
 build conf T.mol   # requires GINGER license
 
 | Building object from sequence file | 
 build s_IcmSeqFileName [name=s_objName] [ library= { s_libFile | S_libFiles} ] [ delete ]
 
 build string s_IcmSeqString [name=s_objName] [ delete ] 
 
(a more flexible way to get a sequence you want, see build string for more details)
 reads s_IcmSeqFileName.se 
 ICM-sequence file and builds an ICM molecular object.  
This sequence file is different from a simple sequence file and contains three  
(sometimes four) character residue names defined in the 
 icm.res residue library file (try show residue types to see the list).
 
Use command build string if you want to build an object from a string with 
one letter coded sequences or a named sequence.
E.g. build string "ASDGF" or  "ASD;DERR" or "nh2 ala his cooh"
 
To get a D-amino acid instead of L-ones simply 
use D as a prefix: Dala Darg. Specify N- or C-terminal modifiers directly 
in the file if needed. The build command will create them in some default 
conformation (extended backbone with different molecules oriented around 
the origin as a bunch of flowers). Several molecules can be specified in 
the ICM sequence file. 
 Residue names may contain numbers (i.e. 4me ). However, the residue numbers 
with a modification character, such as 44a, 44b  should contain a 
slash before the modification character (i.e. 44/a , 44/b ). An example 
in which we create a sequence of residues ala and 4me with numbers 2a and 2b, 
respectively: "se 2a ala 2b 4me".
 The library option lets to temporarily switch the library file. The same result may
also be achieved by redefining the LIBRARY.res array of the LIBRARY table.
 The delete option temporarily sets the l_confirm flag to no  
 and the old object with the same name gets overwritten. 
  
Examples:
  
 build "def"  # def.se file
 build s_icmhome + "alpha.se"  # alpha.se file  
 build "wierd" library="mod.res"  # get residues from mod.res  
# 
 LIBRARY.res = {"icm","./myres"} 
 build "s"  
 | Building object from string | 
 build string s_IcmSequence [ name= s_ObjName ] [ delete ] [i_first_amino_residue_number (1)]
 create an ICM-object from a s_IcmSequence string (see the 
 build command above). 
To get a D-amino acid instead of L-ones simply use D as a prefix: Dala Darg. 
Specify N- or C-terminal modifiers directly 
in the file if needed. 
The build command will create them in some default conformation.
 
The build string command also understands short one line version 
of the full format. 
The short format looks like "ASD" or "ala his" and 
may not start from "ml " or "se ".
 
The possibilities are the following:
 
A list of current amino acids from the icm.res file is the following:one letter code, - it needs to be specified in upper case letters, e.g. "DD"; 
full three-four letter code, e.gg. "nter ala hise Dala cooh"
multiple molecules - just use a comma, a semicolon or a dot as a separator,
e.g. "WWWW;AAAA;EEE" or "ala his trp; nh3+ gly coo-"
mixed one-letter and three letter code, e.g. "AST-sep-tpo-AAA"  to include phosphoserine and phosphothreonine
 
If the sequence is provided as one letter code (e.g. "ACDTCAA") or as an icm sequence
the residue number of the first aminoacid will be set to 1 unless redefined by the optional integer i_first_amino_residue_number.The N-terminal residue "nh3+" will then get number 0. 
 
 Option delete temporarily sets the l_confirm flag to no  
and the old object with the same name gets overwritten.
 Examples:
  
   build string "ADG-sep-HRTE" # the charged terminal groups will be added, note phosphoserine
   build string "ADGHRTE" 2 # assign res number of 2 to 1st alanine
   build string "ADGH;RTE" # two peptides, a and b 
   build string "nter ala Dhis cooh" name="pep"  # one peptide named a_pep. 
   build string "ml a \nse nh3+ his coo- \nml b \nse trp" # molecules a and b  
   build string IcmSequence("GHFDSFSDRT","nter","cooh") # translate and add termini 
# 
# Using alias  BS   build string "se $0" 
   BS ala his trp   
See also: build sequence,  Sequence, IcmSequence.
 
 
 
 
 build tautomer [charge={r_pH,r_window}] ms_het|rs_tautomeric_residues"
 
prepares internal data for quick switching between different tautomer states
of small molecules ms or histidine  rs_his by relative tautomer number or histidine tautomer name.
 
charge option adds enumeration of format charge states at given pH and a window.
 
You need to call this command if you plan to sample different tautomers in montecarlo command (~~tautomer option) 
 
Example: 
 
build string "AHW"
build tautomer a_/his # adds a hydrogen and hydrogen masks to allow the switching
monecarlo reverse tautomer 
 
Example:
 
 build smiles "C(CNN)c1ccccc1"
 build tautomer a_1 charge = {7. 2.}
 set tautomer a_1 1
 set tautomer a_1 2
 set tautomer a_1 3
See also: set tautomer enumerate charge
 
 | Building model by homology | 
 
 [ Homology steps | Loop search | The output ]build model seq_1 seq_2 ...  ms_Templates ...  [ ali_1 ...] [ margin= { i_maxLoopLength, i_maxNterm, i_maxCterm, i_expandGaps } build a comparative model (homology model) of the input sequences based on the similarity 
to the given molecular objects. The margin arguments:
  
| name | default | description | 
|---|
 | i_maxLoopLength | 999 | longer loops are dropped |  | i_maxNterm | 1 | the maximal length of the N-terminal model sequence which extends beyond the template |  | i_maxCterm | 1 | the maximal length of the C-terminal model sequence which extends beyond the template |  | i_expandGaps | 1 | additional widening of the gaps in the alignment. End gaps are not expanded |   
Possible modes: 
 simple one-to-one mode: build model seq_1 [ms_1] [ali_1]    
 N sequences - N corresponding molecules: 
 build model seq_1 seq_2 .. seq_N ms_1,2,..N
This mode requires the minimize tether command to complete the construction.
 Examples:
  
 l_autoLink = yes 
 read pdb "x"  
 read alignment "sx"  
 build model ly6 a_  
 ribbonColorStyle = "alignment" # grey-gaps, magenta-insertions 
 display ribbon 
 
 
 read pdb "2ins"  # multichain  
 a = Sequence( "GIVEQCCASV CSLYQLENYC N" )
 b = Sequence( "VNQHLCGSHL VEALYLVCGE RGFFYTPKA" )
 c = a
 d = b
 build model  a b c d a_1. 
 minimize v_//V "tz" 1000
# or   minimize tether
# Now optimize the side chains 
 selectMinGrad = 1.5 
 set vrestraint a_/* 
 montecarlo fast v_/!I/x*   
# !It means residues which are not Identical to their template residues 
# use  refineModel to energetically optimize the model 
 
 | The algorithm performs the following steps: | 
 Alignment adjustment: modifies the alignment according to i_expandGaps, and  
prepare a sequence with the ends and the long loops truncated according to the 
alignment and the { i_maxLoopLength ,  i_maxNterm  , i_maxCterm } parameters.
 Building a straight polypeptide from the model sequence: builds a full-atom polypeptide chain for this new sequence. The residues in your model 
are numbered according to the template and all the inserted loops residues are indexed  
with 'a','b', etc. E.g. the numbering may look like this:  
 200,201,203,204,204a,204b,204c,205 ... 
This numbering allows one to follow more easily the correspondence between the template and 
the model. If you do not like this numbering scheme, just use the
  
align number a_/* 
command and the model residues will be renumbered from 1 to the number of residues. Backbone topology transfer: inherits the backbone conformation from the aligned (but not necessarily identical)  
parts of the known template
 Identical side-chain building: inherits conformations of sidechains identical to their template in the alignment
 Non-identical side-chain placement:  assigns the most likely rotamer to the side chains not identical in alignment. 
If you want to do more than that apply:
  
set vrestraint a_/*  # assigns the rotamer probabilities 
montecarlo fast v_/Cx/x* # x* selects for all chi (xi) angles 
You can also manually re-optimize any side chains either interactively  
(right-mouse click on a residue atom, then select Shake Amino-Acid Side-Chain)  
or from a script, e.g. for residue 14:  
set vrestraint a_/*  # assigns the rotamer probabilities 
montecarlo v_/14/x*   
ssearch v_/14/x*     # systematic conformational search for the 14-th sidechain 
 
 searches the icm.lps which may contain entire PDB-database for suitable loops  
with matching loop ends and as close 
loop sequence as possible, inserts them into the model and modifies the side-chains according 
to the model sequence.
 The loop file can be easily customized, updated and rebuilt with the  
write model [append] command in a loop over protein structures.  
To use your custom loop file, redefine the LIBRARY.lps variable. 
The loops can be loaded into a fragment of a protein or peptide with the
 build loop stack rs_loop command (eg build loop stack a_/3:15 ).
 Loop refinement and storing alternatives: adjusts the best loops found and keeps a stack of loop alternatives which can later be 
tested (see the Homology gui-menu).
 
 
 The build model command returns the following variables:
 LoopTable master table  containing list of all the loops, their conformation in alphanumeric code,  
a measure of the deviation of the database loop ends and the model attachment sites,  
the loop length 
and the numerical conformation type (not really important). E.g.
  
#>T LoopTable 
#>-1_Loop------2_Conf------3_Rmsd------4_Nof-------5_Type----- 
   a_ly6.a/7:10 31R21       0.1         11          1           
   a_ly6.a/60:63 1RRR32      0.1         8           1           
   a_ly6.a/43:46 211331RRRR  0.240658    4           1           
 Individual loop tables
 Tables called LOOP1 , LOOP2 , etc. for each inserted loop.  
The tables contain the coded conformational string, relative energy,  
the position of the offset in the structure database file ( offset )  
to be able to extract this loop again,  
and the rmsd of the loop ends. Example:
  
icm/ly6> LOOP1 
#>T LOOP1 
#>-Conf--------energy------offset------rmsd------- 
   31R21       0.          3623594     0.092104    
   31RR2       1.519275    3427772     0.083372    
   R1121       1.612712    3750108     0.097777    
   R1R32       1.639177    1529882     0.087113    
   R1RR2       1.880638    3806768     0.079335    
   31R32       3.714823    4561270     0.053853    
   R3RR2       4.531406    4003324     0.042881    
 Writing and restoring the tethers Objects, alignments and tethers can be written to a single binary project
file (see  write binary all ), for example
 
write binary object tether sequence alignment "/tmp/tmp.icb"
 Trouble shooting  build model  may crash.  A possible reason of the crash is  
that the pdb file is not correctly parsed due to formatting errors. 
Many pdb files still have formatting errors, especially those which are generated by  
other programs or prepared manually. In this case the read pdb command 
is trying to interpret the field shifts and, as with any guess work, frequently gets it 
wrong.   
For example, try 2ins and you will see that the atom or residue names are shifted. 
To fix the problem, try to use the exact option of the read pdb command.
 
 
 | Building loop to a model by homology | 
 build loop [stack] rs_fragments
 rebuild specified loop based in a PDB-database search  
(see build model ).
 An example:
  
 read object s_icmhome+"crn" 
 build loop a_/20:26  # rebuild this loop 
 
 | Building object from a chemical smiles string | 
 
 
 build smiles s_smiles_string [ name= s_ObjName] 
 
 |   | create an ICM-object from the smiles -string, respectively.
 Set l_readMolArom to  no if you do not want to assign aromatic rings from 
a pattern of single and double bonds  
(and formal charge and bond symmetrization for CO2, SO2, NO2or3, PO3 ) upon building. 
To suppress the symmetrization and consequential charging of CO2, set the 
 l_neutralAcids flag to yes .
 | 
 Examples:
  
build smiles "CCO"   # ethanol 
 
build smiles "Oc(cc1cc2)ccc1cc2N" 
 
build smiles "Oc(cc1cc2)cc(ccc3)c1c3c2" 
build smiles "C/C=C\C" # cis-2-butene
build smiles "C/C=C/C" # trans-2-butene
 
              # dicoronene 
build smiles "c1c2ccc3ccc4c5c6c(ccc7c6c(c2c35)c2c1c1c3c5c6c"+\ 
             "(c1)ccc1c6c6c(cc1)ccc1ccc(c5c61)cc3c2c7)cc4" 
 
              # NAD 
build smiles "[O-]P(=O)(OCC1OC(C(O)C1O)N1C=2N=CN=C(N)C=2N=C1)"+\ 
             "OP(=O)([O-])OCC1OC(C(O)C1O)N=1C=CC=C(C=1)C(=O)N" 
 
              # Hexabenzo(bc,ef,hi,kl,no,qr)coronene 
build smiles "c1c2c3c4c(ccc3)c3c5c(c6c7c(ccc6)c6c8c(ccc6)c6c9"+\ 
             "c(ccc6)c(cc1)c2c1c9c8c7c5c41)ccc3"  
 
              # rubrene 
build smiles "c1c2c(c3ccccc3)c3c(c(c4ccccc4)c4c(cccc4)c3c3ccccc3)"+\ 
             "c(c2ccc1)c1ccccc1" name="rubrene"
Sometimes the build smiles command is not sufficient. The molecule needs 
to be optimized in the mmff force field and several conformations 
need to be sampled. 
A more rigorous conversion is provided by the convert2Dto3D macro.
 See also: Smiles , find molecule.
 
 | Building hydrogens according to topology and formal charges. | 
 build hydrogen [ as_heavyAtoms ] [ i_forcedNofHydrogens ] [cartesian]
 adds hydrogens to the specified heavy atoms according to their type and  
 formal charge. 
All heavy atoms of the current object are used by default. 
If your have hydrogens already and their configuration is wrong, you can 
delete them with the 
 delete hydrogen command. 
The number of hydrogens may be enforced if the optional  
i_forcedNofHydrogens argument is specified.
 
Option cartesian means that no new hydrogens are added, but, rather, the existing ones
are set to new coordinates according to the heavy atoms (a better syntax for this action is
 set hydrogen ).
 
See also the set bond type command, set hydrogen . 
 Examples:
  
  read mol s_icmhome+ "ex_mol"  # several small molecules  
  display a_4. 
  build hydrogen a_4.  # added and displayed  
#  
  undisplay
  display a_3.
  build hydrogen a_3.
# move one of the nydrogens  
  build hydrogen a_3. cartesian # should put the hydrogen back at a correct position
 
 
 | Building molcart indices for substructure, similarity or exact search | 
 
 
 build molcart {s_tableName|S_tableNames} [sstructure|similarity|exact]
 
builds (or rebuilds) various keys for molcart table.
 
 call s_ScriptFileName [ only ]
 invokes and executes an ICM-script file. End the script with the  
quit command, unless you want to continue to work interactively, or 
use it in other script.
 The option only allows one to suppress opening the script file 
if the call command is inside a block which is not executed. 
By default the script file is opened and loaded into the ICM history 
stack anyway, but the commands from the file are not executed.
 The absolute path of the script can be obtained by calling the Path ( last ) 
function.
 Example:
  
  call _startup             # execute commands from _startup file  
  show Path( last )
 Example of calling scripts inside conditional expressions.
 
if Type( CONSENSUS ) != "table" then
 call _startup only # only means do not read if the table is already loaded
endif
 
 
 center [ {  as |  grob } ] [ only ] [ static | plane ] [ margin= r_margin ]
 centers and zooms the screen on selected atoms   as_  or graphics objects. 
Default objects: all existing atoms and graphics objects.  
The r_margin argument is 
given in Angstrom units and can be used to set a relative size of the selection and the frame. 
Normally all dimensions of the molecule/grob are taken into account, so that the molecule  
can be rotated without changing scale.
 Options:
  
only : do not rescale, translate only, i.e. move the selected atoms to the center of the graphics window 
static : scale only according to the visible X-Y dimensions and the margin.  
Do not take the Z-dimension into account in the size calculation as if you 
do not intend to rotate objects.  
That implies an assumption that the orientation of molecules/grobs/maps will not be changed. 
plane : center plane uses GRAPHICS.clippingPlane parameter and has additional options, see below
 Examples:
  
   nice "1est" 
   center                        
   center Sphere ( a_/15:18 )    
   center a_/1:2 only  # keep the scale 
 
   read grob s_icmhome+"beethoven" # a genius  
   display beethoven smooth 
   center beethoven static   # 10 A margin 
 
 center plane foreground|background 
 
command to set clipping planes by resetting four compounds of the GRAPHICS.clippingPlane variable. 
Make sure to set GRAPHICS.clipStatic to yes.
 
 
 
 [ clear-error ]clear 
 clear terminal screen  
 clear selection 
 clear the graphical selection as_graph
 
Example:
 
nice "1crn"
as_graph = a_/1:5 # select five residues
clear selection # nothing again
 
 clear pattern chemarray
 
clear  SMARTS  search attributes in the input chemical array.
 
Example:
 
add column t Chemical("[C;D2]")
clear pattern t.mol   # D2 attribute will be cleared
See also: Exist pattern
 
 clear graphic [ os ] 
 clears display properties , graphic representation memory and reset the graphic planes to the default.
 
 
 clear error 
 
 clears all error and warning bits previously set by ICM. See also Error ( i_code ) 
 
 
 
 
 [ Color specification | Color object ]The color command colors different shell objects, their parts, 
or different graphical representations with by colors specified in various ways. 
The main color commands are listed below: 
  color all|{wire|xstick|cpk|surface|skin|[residue|atom|variable|string] label|ribbon [base]} color as [full] 
 
  color as|rs|ms {molecule|object|alignment | R_values [window=R2_fromTo] } [full] [all]
 
  color background|volume color  # volume for the depthcuing fog color
 
  color chemical X_chemarray {P_predictiveModel | pharmacophore }
 
  color site ms1 index=i_site|I_sites color_spec
 
  color distance|hbond|angle|torsion P_distParray color
 
  color g accessibility r_depth ([0:1]) # occlusion coloring
 
  color g [add|pseudo] color as GROB.atomColorRadius= r
 
  color g map [m_valuesForColoringGrob] 
 
  color g|grob potential [ fast ] [ reverse | simple ] [ms_sourceAtoms] # electrostatic coloring
 
  color map_Name [ I_colorTransferFunction ] [ R2_fromTo ] [ auto ]
 
 
Options: 
 
full : allows one to set colors for atoms that are not displayed in addition to the displayed ones. 
The default only changes colors of the atoms visible in a given representation. (this option has been added in
versions compiled after Sep 15, 2009). This option replaces the set color command for batch coloring.
all : colors all graphical representations (by default it colors only the specified ones)
 
To change some of the color defaults permanently edit icm.clr file or these preferences (you may change preferences via GUI or directly in session or user_startup ):
 
 
See also: set color to set atom or residue color directly and without graphics.
See also: icm.clr for allowed color names and their r,g,b values; 
 the plot command needs ICM colors , an sarray can be returned with the Color( R ) command.
 
 
 
There are various ways to specify a color in ICM: by name, index or RGB representation.
 
 color_name | color[i_index] | i_Color | r_Color | rgb=rgb_color 
 
 Specifying color by name: 
 
color red
Other color name examples: black, white, grey, blue, red, yellow, green, 
orange, magenta, lightblue.
Color names may be observed and changed in the icm.clr file. 
 
 Requesting contrasting colors by index: 
 
color color[4]
This call uses color number 4 from the list of "named" 
colors (first section of the icm.clr 
file). Colors with their numbers can be listed by the 
 show color 
command and their total number is accessible via the 
 Nof( color) 
function. This mode is useful if you need to color selected 
elements with contrasting colors rather than with a smooth spectrum. 
Example:
 
  read pdb "1crn"
  display ribbon a_1crn.
  show colors 
  color a_/1:5/* color[89] 
  for i=1,Nof(a_/*) 
    color a_/$i color[i]       # speckled coloring 
  endfor 
Specifying color by index:
 
color 3
 
Color indices are taken from the "rainbow" section of the  
 icm.clr file. Currently there are 128 colors (i=0,127) in this section and 
they form a smooth transition from blue to red via white (not really a rainbow). You may 
change the "rainbow" colors in the icm.clr file. Number 128 becomes blue again. 
Using integer color indices is convenient for automatic coloring within ICM loops. 
 
Example: 
  
   display "Colors" 
   for i=1,255 
     color background i 
     print i 
   endfor 
See also color background example .
 Specifying colors interpolated between indexed colors: 
 
color 4.5 
 
The color 4.5 will be the average between the "rainbow color" 4 and "rainbow color" 5. 
 Specifying colors by their RGB representation
 
Color is defined as a combination of red, green and blue components.
The triple may be specified in different formats:
 
 rgb = R_3rgb 
 
- as an array of 3 reals in 0..1 range
 
 rgb = I_3rgb 
 
- as an array of 3 integers in 0..255 range
 
 rgb = s_#rrggbb
 
- as a string where each component is defined by two characters in hexadecimal form.
Optionally prefixed with a hash symbol ("#").
 
Examples setting magenta color (mixture of red and blue):
 
color rgb={255,0,255}
color rgb={1.,0.,1.}
color rgb="#ff00ff"
color rgb="ff00ff"
In case the requested RGB color is not available for the graphics system,
ICM finds the closest color. 
 
 | Coloring molecular objects | 
 The main color command:
 color [ as ] graphic_representation [ color_spec ]
 
 color [ as ] graphic_representation [ I_colors | R_colors ] [window = R_2MinMax]
 
graphic_representation, when specified, must be one of the following
 
 wire | hbond | cpk | ball | stick | xstick | surface | skin | site | ribbon [base] 
 
This command colors selected atoms (   as_ ) or graphics object(s) according 
to the specified color.  
It is possible to either specify a single color color_spec, 
or provide an array ( rarray or iarray ) of colors to color each element of the selection
according to a certain property, as electric charge or Bfactor.
 
The scale is determined by the minimal and the maximal elements of the array, 
independently of the array length.  
First the numbers in the array are scaled so that its minimum corresponds to the  
first color in the "rainbow" section and its maximum to the last color. Then the scaled 
numbers are applied sequentially to the elements of the selection.
If the number of elements  
in the array is shorter than the number of elements in the selection, the array is applied 
periodically.  
If the color array is longer than the selection, the excessive numbers are not used
for coloring but (attention!) they will be used for scaling. 
 
The window={ minValue, maxValue } option allows one to provide a range for color mapping.
It will be used instead of the array minimum-maximum value range as the range from which 
the color array elements will be mapped into 
the rainbow colors. Moreover, values in the color array will be clamped to be in 
the window range.
 
In the following example the Bfactor(a_/ simple) values which 
may range from large negative values to large values will be clamped to the [4.,40.] range.
 
  nice "1ekg"
  color ribbon a_/ Bfactor(a_/ simple) window=4.//40.
Another example:  
  read object s_icmhome+"crn"
  display a_crn.
  color a_//* Charge(a_//*) window={-1.,1.}
It is also possible to show a color bar in the graphics window by changing 
the GRAPHICS.rainbowBarStyle property. 
 
 Each of the command arguments has a default: 
  
All default values can be changed by editing the icm.clr file.objects as_: the current object ( a_ ) only. Hint: to color all objects, use a_* .
graphic_representation: all except ribbon. Ribbons should be colored explicitly
using a color ribbon command.
color_spec. The default coloring is by atom type, except for the
 ribbon representation which is colored by secondary structure by default.
 
In DNA and RNA ribbons, bases can be colored 
separately (e.g. color ribbon base a_1/* white ),  
the default coloring being A-red, C-cyan, G-blue, T or U-gold.   
 
Examples of how the defaults work: 
  
 nice "1crn" 
 display       # also displays wire 
 color         # all except ribbon colored by atom type 
 color ribbon  # only ribbon of a_ by secondary structure type  
 color ribbon red         # only ribbon as specified 
 color a_/1:10 ribbon yellow # parts
 
 More examples:
  
 build string "ASDWER"     # hexapeptide 
 display
 color a_/1:4 green    # the first four residues in green  
 color                 # return to default colors by atom type  
 
  
 read pdb "1crn"
 display a_1crn. only 
                       # color atoms according to their B-factor  
 color a_1crn.//* Bfactor(a_1crn.//*) 
                       # crambin's ribbon  
                       # from blue N-term to red C-term gradually  
 display a_/* ribbon only 
 color a_/* Rarray(Count(1 Nof(a_/* ))) ribbon 
 
                       # another crambin's ribbon  
                       # from blue N-term to red C-term gradually  
                       # thick worm representation 
 assign sstructure a_/* "_"  
 GRAPHICS.wormRadius= 0.9 
 display a_/* ribbon only 
 color a_/* Count(1 Nof(a_/* )) ribbon 
 
 | Coloring 2D molecules in a chemical table | 
 
 
 color chemical X_chemarray P_model
 
calculates atom contributions to the total value calculated by the 
 P_model if this model is
 
linear. (PLS)
built using counted fingerprints (no external column-descriptors)
 
 color chemical X_chemarray pharmacophore
 
color by built-in pharmacophoric definitions
The list of definitions can be listed like this:
 
icm/def> show pharmacophore type
name         codesmarts                        color
-------------------------------------------------------
Negative     [Qn]C(~[O;D1])~[O;D1]             #87cefa
Negative     [Qn]P(~[O;D1])(~[O;D1])(~[O;D1])~*#87cefa
Negative     [Qn]S(~[O;D1])(~[O;D1])(~*)~*     #87cefa
Positive     [Qp][N;D3;$(N(-[*;^3])(-[*;^3])-[*;^3])]#fa8072
Positive     [Qp][N;D2;$(N(-[*;^3])-[*;^3])]   #fa8072
Positive     [Qp][N;D1;$(N-[*;^3])]            #fa8072
Positive     [Qp]C(~[N;D1])~[N;D1]             #fa8072
HBA          [Qa][O,S&v2,N&^2&X2,N&^1&X1,N&^3&X3]#98fb98
HBD          [Qd][!C;!H0]                      #ee82ee
Aromatic     [Qm]a                             #ffa500
Hydrophobic   [Qh][C&!$(C=O)&!$(C#N),S&^3,#17,#15,#35,#53]#e0ffff
 
 | How to color grob surface by depth | 
 
 [ Color molecule | color background | color by alignment | color grob | color label | color map | color volume ] 
 color accessibility g_mesh [ r_maxShade ]
 
modify the color of each surface element of a grob to create perception of depth.
The procedure calculates for each  surface element (triangle) the extent it is occluded from ambient  light by other parts of the molecule, and makes the elements darker  proportionally to occlusion. Thus, concave regions such as pockets  become dark since the surrounding bulk of the protein blocks the light  from most directions, while protrusions remain bright since they are  well exposed.
Repeated application of the
command or using a larger r_maxShade (the default is 0.8) generates a more dramatic
shading of the shape.
 
Example:
 
color accessibility g_electro 0.7
color accessibility g_electro 0.7 # do it two times for a more dramatic effect
To be able to come back to the initial coloring you may need to do this: 
  clrs = Color(g_electro)
  # change grob color, e.g. with color accessibility
  color grob clrs
 
 
 
 | Uniquely coloring by object, molecule, residue or atom | 
 color graphic_representation [ as_molecules ] [object|molecule|residue|atom]
 a special command to color the displayed and selected 
molecules differently. The graphic representation field can be either empty, or one of those:
 wire xstick cpk surface skin ribbon, residue label, atom label, site label, variable label .
E.g. select graphically some atoms and do this:
 
color xstick as_graph & a_*.//c* molecule  
color ribbon as_graph object
color cpk as_graph molecule
color residue label as_graph residue
 
 
 
 color background color_spec
 
sets the background to the specified color color_spec in 
one of the supported formats .
 
Examples:
 
color background blue 
color background lightyellow
color background rgb={255,255,255} # white. integers in 0..255 range
color background rgb={0.,1.,0.} # green. reals in 0.. range
To change it permanently, go to preferences or change the value of the
 COLOR.bg string (e.g. COLOR.bg = "grey" )
See also: COLOR.bg , rgb, color background example .
 
 
 
 color as [wire|cpk|skin|ribbon|xstick|ball|stick|surface..] alignment
 colors specified graphics representations of the selected residues by 
the colors of an alignment as you see it in the alignment window of 
the Graphics User Interface. The color of a residue is controlled by the following 
factors:
  
Note that the CONSENSUSCOLOR table can be divided into sub-sections, and 
the active subsection can be selected from GUI.residue type  
consensus character at the residue position in the alignment 
colors as provided by the CONSENSUSCOLOR.tabtable. 
 Example:
  
  read sequence s_icmhome+"sh3" 
  nice "1fyn" 
  make sequence a_1  # extract 1st sequence 
  group sequence sh3 
  align sh3 
   
  color a_1 ribbon alignment 
  display skin white a_1 molecule
  color a_1 alignment   # colors all representations including skin 
 
 
 
 [ Color grob unique | Color grob matrix | Color grob by atom selection | Color grob map | Color grob potential ] 
Color is a powerful mechanism of showing extra information on ICM grobs
ICM grobs may have individual colors assigned to each vertex, which allows one to use grob
coloring to illustrate properties of 3D surfaces.
 
The simplest way to set grob color is to paint it to a single color. 
 
 color g_grobName color_spec
 
colors the whole g_grobName grob to the color_spec color. 
 
 color grob color_spec
 
colors all grobs to color_spec. 
Check out the color specification section for available color_spec options.
 
Example:
 
torus = Grob("TORUS",3.,1.)
display torus
color torus black # paint it black
color background white # this should improve the visibility
color torus rgb={127,255,212} # aquamarine, as some people call it
 | Automatic assignment of different colors to different grobs | 
 color grob unique
 In addition to the main color command which colors grobs  
there is a special command to automatically assign the displayed  
grobs to different colors.
 
See example for the split grob command. 
 
 | Coloring grob by matrix of RGB values for each vertex. | 
 color  g_grob M_rgbMatrix
 allows one to set individual colors to grob vertexes.
Colors are specified in RGB format in the M_rgbMatrix.Each row of the matrix is an RGB triple.
This type of matrix may be obtained by the Color( g_grob ) function.
 
Examples:
 
torus = Grob("TORUS",3.5,0.5)
display torus smooth
n = Nof(torus)
R_rgb = Count(1 n/2)/Real(n/2) // Count(n-n/2 1)/Real(n-n/2)
add matrix M_rgb R_rgb
add matrix M_rgb Rarray(n,0.3)
add matrix M_rgb Rarray(n,0.7)
color torus Transpose(M_rgb)
This command allows one to create special effects,
like gradual disappearance of a grob into background:
 
# set the scene
color background black
# uncomment these lines to get a more sophisticated example
# torus = Grob("TORUS",3.5,0.5)
# display torus smooth 
# color torus blue
# the active grob
g = Grob("SPHERE",3.,5)  # a wire sphere  
display g smooth 
color g Random(Nof(g),3, 0., 1.) # color randomly 
M_colors = Color(g)               # extract current colors 
# make the sphere disappear (modern poetry)  
for i=1,20    # shineStyle = "color" makes it disappear completely 
 color g (1.-i/20.)*M_colors  
endfor         
for i=20,1,-1 # bring the sphere back  
 color g (1.-i/20.)*M_colors  
endfor 
 | Coloring grob by proximity to atoms | 
 
 
 color g_grobName as_closeAtoms color_spec [add|pseudo]
 
 color g_grobName M_xyz distance color_spec 
 
colors vertices of the grob which are less than GROB.atomSphereRadius to  
any of the selected atoms or XYZ coordinates. The default value for the radius is 4Å.  
 
Options:
 
add : adds van der Waals radius for each atom to the GROB.atomSphereRadius parameter
pseudo : for hydrogen bonding acceptors considers distances from LONE-PAIR centers at 1.7A distance from the acceptor atoms. If an atom is not an acceptor, the atom itself is considered. Note that a_//HA
is a selection for hydrogen bonding acceptors and a_//HD is the donor selection.
 
Example in which we color 1.3 radius sphere around the lone pairs of hydrogen bonding acceptors:
 
color a_REC.//HA g_pocket magenta pseudo  GROB.atomSphereRadius=1.3
 
See color specification for the definition of color_spec. See also: Grob( g R_6) function to return a patch of certain color.
 
Example:
 
nice "1crn"
make grob skin a_1crn. name="g_1crn"
display g_1crn
color g_1crn green
color g_1crn a_1crn.//1:60 red # color a patch by atom proximity
 
See also: make grob skin, make grob potential .
 
 | Coloring surfaces by 3D scalar field | 
 color g_grob map map_Name I_transferFunction R_2mapValueBounds [ color_spec ]
 colors vertices of the g_grob by the values of the map_Name . 
The map values at each grid point are first clamped into the R_2mapValueBounds range, 
then this range is divided according to the  number of elements in the transfer function  
and each point is colored according to the value of the transfer function. 
The optional color_spec parameter is explained in the color specification section.
 The new color will be mixed with the current color of grob points. 
Therefore if you want to color each of 3 RGB channels with a different 
normalized property value, first color the grob black, and then color with 
the red , green , or blue color depending on which channel you intend to 
use. Note that zero in the transfer function correspond to no color . 
Corresponding grob nodes will not be colored.
 Transfer function is the same to the one in color map but has certain differences. 
This function (e.g. {0 0 0 1 2 3} ) contains any number of positive integers.  
0 means "do not color", and each positive value is a scaling factor  
for the color provided as an argument, or a parameter to select 
a color from a predefined rainbow. In the above example,  
the R_2mapValueBounds range will be divided into 6 ranges and each value 
range will be colored accordingly.
 Example in which we color the vertices of a grob by inverted values of truncated hydrophobic potential:
  
  read obj s_icmhome+"data/xpdb/1sre.ob"
  display a_	
  make grob skin a_2 a_2 name="g_pocket"        # create g_pocket 
  make map potential "gs" Sphere( g_pocket a_1) 
  compress g_pocket 1. 
  color g_pocket black 
  color g_pocket map -m_gs { 0,0,0,3,4,5 } { 0. 0.5  } green           
  display g_pocket
  h = Transpose( Color( g_pocket ) )[2]  # extract hydrophobicity 
 | Coloring grob by electrostatic potential | 
 color g|grob potential [ fast ] [ reverse | simple | heavy ] [ms_sourceAtoms]
 
 | (REBEL feature) calculates electrostatic potential waterRadius 
away from the surface of the g_skin graphics object and color surface elements  
according to this potential from red to blue.  
Important the location of the center of the water probe is 
determined by the grob normal ( you can change it with the set g_ reverse command). 
If you compute the potential at a blob outside the molecule but with the normals 
point outwards, use the reverse option. To compute potential without any positional correction  
including normals use the simple option. The potential is calculated either by the   REBEL 
boundary element solution of the Poisson equation, or, if option fast  
is specified, by a simple Coulomb formula with the dielConstExtern 
dielectric constant  (78.5 by default).
 
The calculation is also affected by the TOOLS.rebelPatchSize parameter (1. by default), and option heavy .
Option heavy is preferred.
 
 |   | 
 The local value of potential is clamped to the range 
[ -maxColorPotential, +maxColorPotential ].  
It means that a potential larger than maxColorPotential is represented by  
the same blue color, while values smaller than maxColorPotential are  
represented by the same red color.  
The real range is reported by the command and you can adjust  
 maxColorPotential to cover the whole range.  
To suppress the absolute maxColorPotential threshold and use auto-scaling 
instead set maxColorPotential to 0.  
The color bar with values will appear according to the 
 GRAPHICS.rainbowBarStyle preference. 
There are two macros to generate potential-colored skins:  
 rebel and rebelAllAtom
 The second one (given below) considers all the atoms (including hydrogens)  
with their charges.
 The mean value of the potential at the surface is returned in r_out , 
and the root mean square deviation of the potential is return in r_2out  
shell variables, respectively. The averaging is free from bias due to 
uneven density of grob points. It uses equal size cubes distributed 
evenly over the surface. The number of representative cubes used for 
the calculation is return in i_out .
 
 Examples:
  
read object s_icmhome + "crn"
display a_1
make grob skin a_1 name="g_crn"
make boundary a_1
display g_crn
color g_crn potential
See also: 
 electroMethod, 
 make boundary, 
 delete boundary, 
 show energy "el", 
 Potential( ). 
 
 color label [ as ] color_spec
 
 color label as [ I_colors | R_colors ]
 Colors labels associated with the selected residues or atoms. 
A simple option is to specify a single color using color specification formats. 
It is also possible to provide colors for each atom using
an iarray I_colors or rarray R_colorsIf no atom selection is specified, all labels are colored.
 Examples:
  
 read object s_icmhome + "crn" 
 display a_//n,ca,c white 
 display label residue 
 color label a_/* Count(1 Nof(a_/*)) 
 #
 color label a_/5:10 magenta 
 
 
 read object s_icmhome + "crn" 
 display a_//n,ca,c white 
 display label residue 
 color label lightyellow 
See also: 
 display label, color object, resLabelStyle . 
 
 
 
 color map_Name [ I_colorTransferFunction ] [ R2_fromTo ] [ auto ] 
 color the current or the specified map according to the color transfer  
function supplied as I_colorTransferFunction.
 The default: 
By default the maps are colored in such a way that points with zero map values become  
transparent while values above and below zero are colored by shades of blue or red, 
respectively.
 The R2_fromTo array of two elements allows one to set the lower and the upper boundaries 
for the red and blue colors, respectively. All values above and below will be trimmed to the 
range. For electrostatic maps the array is set to -5.,5. by default.
 In the auto mode all grid points are divided to Nof( I_colorTransferFunction ) color classes according 
to the normalized function value (sigma units around the mean value) and each class 
is colored as specified in the I_colorTransferFunction (0 means transparent).
 If the number of I_colorTransferFunction elements is odd (2* n+1 ) the class boundaries are 
the following:
  
For even number of elements (2* n ), boundaries are shifted by half a sigma, so that the 
middle class is between Mean-0.5*sigma and Mean+0.5*sigma. 
Color codes are in arbitrary units since the array is normalized so that  
the highest value corresponds to the red color. Deep blue is 1.  
Zero is always the transparent color (no coloring).  
The spectrum is defined in the icm.clr file.  Examples of coloring: -infinity 
 Mean- n *sigma,  
 Mean-( n -1)*sigma,  
 Mean-( n -2)*sigma,  
 ... 
 Mean- 1*sigma,  
 Mean 
 Mean+ 1*sigma,  
 ... 
 Mean+( n -1)*sigma,  
 Mean+( n )*sigma.  
 +infinity 
  
Examples:{0 0 0 0 0,0 0 0 3 10} default map coloring, color only high densities  
(blue from 3 to 4 Sigma, red >4 Sigma). 
Comma only shows you where the mean is. 
{0 1 0} color only Mean+- 0.5*sigma nodes, ignore high and low densities. 
{1 0 2} color low and high densities by different colors, ignore densities around the mean.  
{1 2 3 0 5 6 7} similar the previous one, but with more grades 
 
read pdb "1crn"
make map potential name="mpot"
color mpot {1 2 0 4 5}
# OR
color mpot
 
 
 
 color volume color_spec
 
determines the color of the fog in the depth-cueing mode ( activated with Ctrl-D ).
Format of color_spec is explained here.
 
For example, if you want that distant parts of you structure are 
darker (black fog), but the background is sky-blue, you will 
do the following: 
 
  
color background lightblue   
color volume black  
 
 
 
 | compare: setting conformation comparison parameters for the montecarlo command | 
 
 [ Compare atom | Compare variables | Compare surface ]compare vs | as  [ static | chemical | surface ] | [ compareMethod=.. ] 
sets a metric for calculating a distance between different conformations in a stack .
 The goal of the two following compare commands is to provide a desired  
 setting before the montecarlo command and stack operations.   
This command defines a filter which is used to decide how many and what conformations 
from the stochastic optimization trajectory are kept as low energy representatives of  
a certain area in conformational space.  
This metric is also used for the subsequent stack manipulations,  
e.g. compress stack.
 The compare command defines the distance measure between molecular conformations 
which is used to form a set of different low energy conformers 
in the course of the stochastic global optimization procedure. 
The defined distance is compared with the vicinity 
parameter and determines whether two conformations should be considered 
different or similar (i.e. belonging to the same slot in the 
  conformational stack).  
The compare command determines the spectrum of conformations that 
will be retained in the stack, accumulated during a montecarlo procedure.  
The default comparison set is a set of all free torsion variables 
(see compare vs_ ). 
Other methods compare atom RMSD with and without superposition, 
using chemical superposition, and
compare only the atoms in the interface with a molecule ( compare surface ).
 
Please note that the compare command can change the compareMethod preference.
Example:
 
  montecarlo v_//2 compareMethod ="chemical static"  # suitable for docking
 
 See also montecarlo, compareMethod 
 Unrelated array comparison tools:
 
 | Compare by deviations of cartesian coordinates with or without superposition | 
 compare [ static ]  as
 The command needs to be run when Cartesian root-mean-square deviation for positions of 
selected atoms (  as_ ) as a distance measure between  
stack conformations.  
Set the vicinity parameter to about 2.0 Angstrom if you want to 
consider conformations deviating by more than 2 A as different conformational families.
 By default the selected atoms in different conformations 
will be optimally superimposed before the coordinate RMSD is calculated.  
The static option  suppresses superposition and measures 
absolute deviation of the coordinates between conformations. 
The static option is relevant for ligand atoms in docking simulations 
to a static receptor.
 The result of this procedure is that an internal flag is set  
to perform cartesian RMSD calculations during montecarlo run, 
and a set of selected atoms is marked for comparison.
 
 
 | Compare by deviations of internal coordinates/torsions. | 
 compare  vs
 use angular root-mean-square deviation for selected internal variables 
(usually torsion angles) as distance (set 
 vicinity to at least 30.0 degrees accordingly)
 Examples:
  
   compare v_//phi,psi            # compare ONLY the backbone angles  
   vicinity=30.0                  # consider two conformations  
                                  # with phi-psi RMSD < 30. as similar  
 
   compare a_2//ca static         # compare Cartesian deviations  
                                  # of the second molecule's alpha-carbon atoms  
                                  # without prior optimal superposition  
   vicinity=3.0                   # consider two conformations with second  
                                  # molecule deviation < 3 A as similar  
 
 | Compare by coordinate deviations of the surface patches only | 
 Compare by surface patch rmsd: dynamically selecting comparison atoms
 
 compare  surface  as_currentObjSelection | as_staticReferenceObject. 
 Similarly to  compare static as_  it will look at absolute deviations 
of coordinates, but the comparison will be applied dynamically  
only to a patch sub-selection of the atoms in the current object in the  
 selectSphereRadius (default 5. A) proximity to the non-current-object atoms  
of the as_ selection.   
The selection typically would look like this: 
 a_activeIcmObject.//ca | a_staticPdbReceptorObject.//ca
 Example:
  
 compare a_runObj.//ca | a_recName.//ca surface 
 Note that this command dynamically calculates a subset of as_currentObjSelection near 
 as_staticReferenceObject . This distance (static RMSD) is used inside montecarlo command
 or in compress stack .
 The surface mode is useful for protein-protein docking simulations when you want to measure 
the sRmsd distance between the current conformation and the stack conformations  
ONLY for the interface residues of the moving molecule.  The interface residues 
are dynamically determined as those which are close to the static receptor specified  
in the second part of the selection. This static receptor should reside in a separate 
object.
 The vicinity size is determined by the selectSphereRadius parameter
 An example in which we sRmsd-compare only those carbons of barstar  
which are next to the barnase surface.
  
 read pdb "1bgs"     # a complex 
 read pdb "1a19.a/"  # the protein ligand only 
 convert  
...     # make maps and other actions to prepare protein-protein docking 
 compare a_//c* | a_1.1 surface  # will use only  
 selectSphereRadius = 7. 
... 
 montecarlo  
 
 
 
 [ Compress alignment | Compress grob | Compress stack | Compress binary ]compress grob vertices, alignment gaps, shell objects, or stack conformations 
 | compress gapped columns in multiple alignments | 
 
 
 compress ali 
 
removes gapped columns in place.
 
 | compress graphical objects | 
 
 
 compress g_grobName1 g_grobName2 .. [ r_minimalEdgeLength=.5 ] 
 
 compress grob [ selection ]          [ r_minimalEdgeLength=.5 ] 
 simplify a grob (graphical object) by eliminating/merging small triangles into bigger ones.  
This procedure allows one to generate very "low-resolution" molecular surfaces. 
The default value of the r_minimalEdgeLength is 0.5 Angstroms. 
Typically compression with the 1. A minimal edge parameter reduces the 
number of triangles by an order of magnitude. 
  The compression algorithm does not change the connectivity of the  
surface. Therefore you can still split the compressed grob and 
find the fully enclosed cavities.
 The compress command returns the new number of verteces in i_out and the new number 
of triangles in r_out variables, respectively (for the last compressed grob only).
 Example:
  
read pdb "1crn" 
make grob skin smooth name="g_1crn" # creates a grob with many triangles 
display g_1crn 
compress g_1crn 1. # significantly reduces the number of triangles in the grob
display g_1crn 
compress g_1crn 4. # further simplification of the grob
display g_1crn 
It is important in this example to use the make grob skin command with the smooth option,
since it closes the cusps. 
See also:
 
delete all compress        # to delete all objects/grobs/maps not used in slides
compress binary file.icb     # compresses .icb file files
 
 | compress stack of molecular conformations | 
 
 
 compress stack [ fast ] [  i_fromConfNumber i_toConfNumber ] [r_enerDiff]
 
 compress stack tree [number=nClusters]
 
regular compression Remove similar and/or high energy conformations from the  conformational stack. 
During a montecarlo run, some conformations of the generated  conformational stack 
may be substituted by newly calculated ones with lower energies.  
New conformations may violate the initially correct distribution of 
the conformations in the slots of the stack as defined by the vicinity 
parameter and by comparison mode specified by the compare command. 
The compress command compares all the pairs of the stack conformations, 
identifies pairs of conformations in which two conformations  
are separated by a distance less than the vicinity threshold, 
and removes the higher energy stack conformation from each close pair. 
Optional arguments i_fromConfNumber and i_toConfNumber 
define a subset of the conformations in the stack which are to be 
analyzed and compressed (if any). The whole stack (from the first to 
the last conformations) is processed by default.  
 Note that if two close conformations are compressed into the better energy one, 
the number of visits of the resulting conformation will be a sum of the two 
numbers of visits.
 The fast option applies an iterative compression algorithm which can be several 
orders of magnitude faster but the result may slightly differ form the default 
compress. The fast algorithm algorithm performs the following steps:
  
sort conformations by energy 
start from the lowest energy conformation  
find all conformations with higher energy than the current conformation within vicinity .  
delete similar conformations with higher energies and compress stack 
move to the next conformation in the new sorted stack, make it current and go back to step 3 
 See also 
  How to merge and compress several conformational stacks
 Example (define a distance and compress) we generate two stacks, 
merge them and re-compress two sets with a different comparison criterion:
  
 build string "VTLFVALY" 
 mncallsMC = 5000 
 montecarlo   # generates stack
 write stack "f1" 
 delete stack # clean up and 
 montecarlo   # generates another stack 
 read stack append "f1"  #  
 compare v_/2:5/phi,psi  # compare settings are different 
 vicinity = 40.          #  
 compress stack fast 
 vicinity = 20.          # new vicinity 
 compress stack  
 compress stack  2.0  # remove confs > 2 kcal/mole higher than the lowest one
 
compress stack tree (only for the compareMethod = "atoms static" ) 
The algorithm with the tree option performs clustering of conformations based on either vicinity parameter (adaptive n_clusters, the number of clusters may vary)  or an explicit  number= n argument that defines the number of clusters (adaptive vicinity threshold).
One representative with the lowest energy is picked from each cluster.
 
Example:
 
#generate a large stack
  compare static a_//c,ca,n,o,cb  # applies compareMethod = 2 inside 
  vicinity = 2.
  compress stack tree  # first pass to reduce to 'one-per-cluster'
  if(Nof(conf)>100) compress stack tree number=100
 
See also: compress binary
 
 
 
 
 compress binary s_inputfile [ filename=s_gzipfile | delete ] 
 
Compresses the s_inputfile file using GZIP algorithm. 
If the filename is specified, the compressed file will be saved as s_gzipfile.If the delete option is specifeid, the compressed file replaces the input file (in place compression).
Otherwise (by default) .gz extension is added to produce the compressed file name.
 
Example:
 
read pdb "1crn"; make map potential name="x"; write map x # create x.map file
compress binary "x.map" delete # compress in place
 
See also:
 
 
 
 [ Connect molcart ]connect [ append ] [ none ] [ ms_molecule | g_grob ] 
 connect none  
 
 | connects selected molecules to the mouse for independent rotation 
(by the LeftMouseButton) and translation (MiddleMouseButton) with respect to 
the original coordinate frame.
 
 |   | 
 Option append will add selected molecule to the previously connected molecules
 Note, that rotations/translations in the connect mode 
actually change the atomic coordinates of the selected molecules and keep 
the coordinate system unchanged in your graphics window.
 To restore the usual global mode (i.e. all objects/molecules are disconnected and 
the mouse does not change their absolute positions, but rather the point of view),  
hit the Esc key when the cursor is in the graphics window. 
To restore the global mode temporarily press the Shift button.
 Use: connect none to switch back to the global connection 
Examples:
 
read pdb "1eff"
copy a_1eff. # create something else in the scene
display ribbon a_*.
connect a_1eff.
# move it around now
connect none # disconnect
 
 
 | Connect to a Mysql database or database file | 
 
 
 connect molcart {S_host_user_pass_db|s_host s_user s_pass s_db} [name=s_connectionID]
 
Connects to the database server specified by the command parameters. It is possible to also specify the s_connectionID which will be assigned to the connection.
Parameters returned by the  Name(sql connect)  may be used in this command.
 
 connect molcart on
 
Reconnects to the current Molcart.
 
 connect molcart refresh
 
Reconnects to Molcart using settings stored in user's preferences.
 
 connect molcart filename=s_file [s_db] [name=s_connectionID]
 
Opens a Molsoft database file. Database name s_db and the s_connectionID may be specified.
 
 connect molcart s_connectionID off
 
Disconnects specified Molcart connection. See molcart connection options for explanation
 
 connect molcart local off
 
Closes all open database files.
 
See also: molcart, molcart connection options, list molcart, set molcart, Name molcart.
 
 
 
 continue 
 
skip commands until the nearest endfor or endwhile . 
 Example:
  
for i=1,5 
  if i==3 continue  # do not print 3 
  print i 
endfor 
 See also: flow control statements.
 
 
 
 [ Convert comp | Convert fragments | Convert mol | Convert and reroot ]convert [os_nonICM] [auto|charge|exact|heavy|graphic|selection|simple|tether|selftether|tree=s_smiles] [s_objName] 
  convert as_icmRootAtom [sstructure=as_scaffold] [auto] # root the icm-tree at as
 
  convert rs_patches ..
 the first convert command converts an incomplete non-ICM-object (e.g. object of type 'X-Ray' 
resulting from the read pdb command) into a true ICM-object for which you may 
calculate energy, build a molecular surface and perform all operations.
 
 Options: 
auto - convert in place, preserve graphics and selections, e.g. convert auto selftether
charge - transfer charge from the original
exact - do not use the icm.res library by res name, convert as is.
heavy - regularization (obsolete)
graphic - transfer graphical attributes
selection - transfer selection (as_graph)
simple - special mode for disjoint chemicals
tether - impose tethers to the original (use selftether for in-place or auto mode)
tree= s_smiles  - build the tree according to the smiles topology (small mol. convertion)
selftether - imposes selftethers to the original coordinates, set field for the added heavy atoms ("_ADDED") and shifted upon conversion atoms ("_SHIFTED"), e.g.  display cpk Select( a_// "_ADDED") 
 
Description There are two principally different modes of conversion. 
In the default mode the program looks at the residue name and tries to 
find a full-atom description of this residue in the icm.res file.  
This search is suppressed with the exact option.
 Hydrogen atoms will be added if the converted residues are known to the program and 
described in the icm.res library.  
If the object selection is omitted, the  current object will be converted.  
If default s_newObjectName is generated by adding number "1" to the source object name.  
If s_newObjectName is the same as a name of the input object, the input object will be overwritten. (in-place conversion)
 
  The default convert command is best used to convert  
PDB entries which have explicit residue descriptions and usually 
do not have hydrogen coordinates. In this mode each residue name is 
searched in the icm.res file and the coordinates of the present heavy 
atoms are used to calculate the internal geometrical variables (bond 
lengths, bond angles, phase and torsion angles) for the full 
atom model.  
 
  Every ICM atom will store the original coordinates as selftether (try show a_// and watch for the
 ts= x , y , z record. Later these selftethers can be used with the "ts" term.
 The exact option: converting protein with unusual amino-acids
 Some pdb-entries may contain non-amino acid residues, or modified amino-acid 
residues which do not need to be replaced by standard full atom library entries 
with the same name . In this case use the exact option.  
This option suppresses interpretation by short residue name and  
converts the existing atoms and bonds in  
single-residue molecules (amino acids in peptides and proteins will still 
be extended by hydrogens upon conversion, to suppress that conversion 
write the molecule as mol and read it back, then convert exact ). 
Option exact may be necessary because chemical compounds with a  
four-letter short name identical to one of the amino-acid residues, could be mistakenly  
converted into an amino-acid with a corresponding name.
 The charge option
 Normally, upon conversion, the atomic charges are taken from the icm.res library entries. 
Option charge tells the program to inherit atomic charges from the os_non-ICM-object. 
For small molecules, use set charge,  set bond type and, possibly, 
 build hydrogens before conversion of a new compound.   
 i_out will contain the number of heavy atoms missing from the pdb-template.
 
The graphic option  preserves the graphical representations and colors as is.
 
The selection option preserves the atom selection bit during the conversion. 
 Useful for in-place convert.
 
The sstructure= tree_substructure option makes sure that the tree is drawn through the substructure. It also needs a consistent entry atom provided as as_newRoot argument. 
 
 
The auto option converts in-place preserving graphics and selection information. This is a convenient shortcut for
 the following combination:
  
 graphic selection  s_newObjectName is set to the input object name
  
The smiles option ( an addition to auto option ) allows one to explicitly derive a tree structure from the smiles string. If the smiles string matches only part of the molecule then 
 the rest of the tree will be built according to the default rules.
 
 
Additional cleanup   Actually more procedures need to be performed to prepare a functional object from crystallographic 
coordinates, e.g. identifying optimal positions of added polar hydrogens, assigning the most 
isomeric form of histidine , and finding a correct orientation of side-chain groups for glutamine  
and asparagine.
 We recommend the convertObject macro instead of the plain convert command to 
achieve those goals.
 Refining the model
 To refine a model use the refineModel macro.
 convertObject macro
 The convertObject macro is a convenient next layer on the convert command. 
The macro may convert only a few molecules out of your pdb file, optimize 
hydrogens and do some other useful improvements of the model.
 
Output. 
 
Selection tags ( Select ( as tag ) returns the selection ) :the converted object
i_out : the number of heavy atoms missing from the pdb-template, 
r_out : rmsd from the pdb-template atoms (non zero for residues with bad coordinates),
i_2out : the number of deviating by more than 0.2A atoms heavy atoms,
r_2out : the maximal deviation 
 
"built" -heavy atoms that were missing in a pdb (e.g. some lys and arg in 1qz5)
"shifted" -atoms that shift after conversion (e.g. silly lysines in 1qz5)
 
 
Example:
 
read pdb "1crn"
display
as_graph = a_//c*
convert auto    # converts in-place preservinf slection and graphics
strip virtual
convert         # creates new a_1crn_1. object
 
If single atom is provided as an input selection it will be taken as a new ICM tree root. See convert and reroot for details.
 
 
See also: 
 
 | Comparing convert, minimize tether and regularization. | 
 It is important to understand the difference between the convert 
command, the minimize tether command and the  
 regularization procedure implemented in the macro regul .
 All three create ICM-objects from PDB coordinates, but details of 
generated conformations and the amount of energy strain will differ.
 We recommend to use convertObject macro for most serious applications involving 
energy optimization.
 convert
  
   uses all-atom residue templates (including hydrogens) from the icm.res library 
   creates temporary ICM-library descriptions for unknown residues 
   makes geometry identical to the PDB coordinates: bond length 
and bond angles may be distorted. 
   the converted structure will be energy strained because of common 
imperfections of the PDB entries and the hydrogen atoms added by the procedure  
   C-alpha-only structures will not be properly converted because a special  
prediction algorithm is required to extrapolate the coordinates of all atoms from C-alpha atom positions.  
   these objects are good enough for graphics, skin, secondary structure assignment, rigid body docking.  
They are not good for loop modeling and side-chain modeling.  
  needs to be followed by polar hydrogen placement and histidine state prediction  
( implemented in the convertObject macro ) 
 minimize tether threading a regular polypeptide through an incomplete/gapped set of coordinates.
   
   you need to create a  sequence file first and use the build command; 
   you will need to create the missing residues manually, say, with the  write library 
command; 
   build will use all-atom residue templates including hydrogens, and 
will preserves the fixation; 
   the linear chain with fixed idealized covalent geometry 
or, actually, any fixation you define, will be threaded onto the PDB coordinates  
in the best possible way; 
   Ca-atom PDB structures will be handled properly if all backbone torsion 
angles are unfixed; 
   the resulting ICM-object will be strained and will need further relaxation. 
 full  regularization and refinement
  
  (see macro regul for details). uses minimize tether to create the starting conformation; 
   employs a multi-step energy minimization (annealing) of the structure 
to relief energy strain; 
   these are the best objects that can create in ICM for further simulations. 
 Examples:
  
   read pdb "1a28.a/"           # reading just the first molecule 
   convertObject yes yes no no  # the best way to prepare for docking 
                                # convert + optimizes polar H, His and Pro 
 
   read pdb "1crn"         # X-ray object, no hydrogens, no energy parameters  
   convert                 # a_1crn_icm ICM-object will be created  
   convert a_1. "new"      # a_new. ICM-object will be created  
   convert a_1. exact      # keep modified residues as is 
 
   read mol2 s_icmhome+"ex_mol2" 
   set object a_catjuc. 
   build hydrogen  
   set type mmff 
   set charge mmff 
   convert  
 
 
 | Creating a multi-part molecule in which parts are separately controlled. | 
 
 
If you want to create a local "epitope" of a protein with chain fragments around a particular area,
it can be done with the 
 
 convert rs_fragments
 
command. This command will create a molecule divided into fragments and each fragment will start from
virtual atoms vt1 and vt2 and will be controlled with 6 virtual variables. The first vt1 of the second, third
etc. fragments will be connected to the first real atom of the first fragment.  
Example:
 
read pdb "1crn"
convert a_/4:10,12,27:33,41:45
Nof( a_m//vt1 ) # the number of pieces
show v_/P1/V  # the pos. variables of the 1st part
show v_/P2/V  # the pos. variables of the 2st part
display ribbon
color ribbon a_/P3  # showing the 3rd part
 
This operation is useful to create a local patch object for docking of global optimization.
 
 
 | Converting a chemical compound from a mol/sdf or mol2 files. | 
 To convert a chemical from GUI menus, follow these steps:
  
make sure that bond types and formal charges are correct 
select the MolMechanics.ICM-Convert.Chemical menu item, check the parameters and press OK. 
 Normally to convert from 2D to 3D you need to optimize the ligand. ICM will perform 
 a multiple start global optimization using the MMFF94 force field ( internally it runs the convert2Dto3D macro ).  
If you want to preserve the geometry, select the keepGeometry option. 
 Command line conversion To perform the same conversion in a batch run the convert2Dto3D macro,  
or, to make a conversion without full optimization from a command line or script,  
issue the following commands:
  
# assuming that bond types and formal charges are correct 
build hydrogen  
set type mmff 
set charge mmff   
randomize a_//!vt* 0.01 # sometimes it helps to avoid singularities 
convert 
set v_//T3 180.  # making flat peptide bonds 
fix v_//T3       # optional 
 
Example of geometry optimization:
 
read mol input = String( Chemical("C(C(O)=O)N1C(C(=Cc2ccc(c3ccccc3[Cl])o2)SC1=S)=O"))
convert2Dto3D a_ yes yes yes yes   
list convert2Dto3D
 | Converting a chemical compound and rerooting the tree at the same time | 
 convert as_rootAtom [auto]
 if an atom selection is provided instead of the object selection, 
the tree will be rerooted to the selected atom. The converted molecule 
will have the as_rootAtom located at the root of molecular tree so that 
it is convenient to modify another molecule with the converted molecule.
 
auto option behaves as in normal convert command. It preserves selection and graphics and preforms in-place conversion.
 
If you need to reroot an ICM object, do the following: 
  
strip it to a non-ICM object: e.g. strip virtual   
re-root and convert, e.g. convert a_//hb1 . 
 
Example:
 
build smiles "C(=CC=C(C1)C(=O)O)C=1"
display wire
wireStyle = "tree"
strip a_ virtual
convert a_//h31 auto   # converts from a new root
 
 
 
 
 [ copy-object ]copies stuff which CANNOT be copied by direct assignment such as: 
a=b 
 
 copy os [ s_newObjectName ] [delete|display|graphic|selection|stack|strip|tether] 
 
creates a copy of os_ with the specified name. Default source object is the current object. 
The default name is "copy" (object a_copy. ) 
 Options:
 
delete forces the command to overwrite the object with the same name 
if there is a name conflict. 
display or graphic copy the display attributes of the parent
selection copies named selections defined on the parent object into the copy
stack copies internal stack of the object (see store-object-stack) (the stored stack is not copied by default)
strip applies the strip operation to the copied object. The stripped object 
has a PDB type and is much smaller in memory. 
 
tether applies tethers from the source object to the atoms of the copy-object. 
For further refinement see the refineModel macro.  
 
Examples:
  
 read pdb "1crn" 
 copy a_           # creates a_copy.    
 copy a_1. "aaa"   # creates a_aaa.  
 
 read object s_icmhome+"crn" # read ICM object 
 copy a_ strip delete tether # create a_copy. and tether to it 
 
 
 crypt key= s_password { s_fileName | string= s_string }
 encrypts the file s_fileName or string s_string in place  
(the size of the encrypted file/string is exactly the same),  
adds extension .e to the file name.  
If string is encrypted, its name is not changed. 
Apply the operation again to restore the file or string. You may encrypt both 
text and binary files. Note that this command has nothing to do with the 
unix crypt utility. ICM uses different algorithm.
 Examples:
  
crypt key="HeyMan" "_secretScript"    # encrypt and create *.e file 
crypt key="HeyMan" "_secretScript.e"  # decrypt it
 
 
ss="Secret rumour: Div(Rot(F))=0 !" 
crypt key="fomka" string = ss  # encrypt 
show ss 
crypt key="fomka" string = ss  # decrypt 
show ss 
 
 
 
 
 
A basic ICM class for arrays of date objects
 
See also: Date. 
 
 
 [ Delete shell object | delete alias | Delete molcart | Delete plot | Delete selection | Delete variable | delete atom | delete directory | delete file | Delete session | delete hydrogen | delete object | delete molecule | delete bond | delete boundary | Delete column table | delete conf | delete drestraint | delete label | Delete label chemical | delete link | delete map | delete sequence | delete site | delete sstructure | Delete site alignment | delete disulfide bond | delete peptide bond | delete stack | Delete stack object | Delete element | delete table | delete term | delete selftether | delete tether | Delete parray | Delete chemical selection ]delete shell objects or their parts. 
 delete [ alias ] [ alignment ] [ factor ] [ grob ] [ iarray ] [ integer ] [ logical ] [ macro ] [ map ] [ matrix ] [ profile ] [ rarray ] [ sarray ] [ sequence ] [ string ] { name1 | s_namePattern1 } name2 ...
 
 delete all  # to delete all shell objects not marked with a no delete flag
 
 
ICM-shell objects have unique names; to delete some of them just type 
 delete [ mute ] { icm-shell-objectName1 | s_namePattern1 } icm-shell-objectName2 ...
 You may use name patterns with wildcards (see 
 pattern matching) 
and add explicit specification of the ICM-shell object type, 
if you want the search to match only the objects of particular type. 
If the ICM-shell object type is not specified, all the shell-variables 
will be considered.
 Option mute will temporarily switch off the l_confirm flag.
 delete class
 
 delete string className 
 
 delete string command | html
 
to delete icm-command files or html-documents loaded into ICM
 
 delete rarray view 
 
to delete all the views (returned by the View() function)
 
Examples:
  
   delete aaa           # delete ICM-shell object aaa  
   delete a b c         # delete ICM-shell objects a, b and c  
   delete "*"           # delete ALL ICM-shell objects added by user  
   delete "mc?a*" mute  # delete ICM-shell objects matching the pattern  
   delete rarrays       # delete ALL real array  
   delete objects       # delete ALL molecular objects, same as delete a_*.  
   delete rarray "a*"   # delete real arrays starting with 'a'  
Deleting array elements To delete a selection of array elements specified as an index expression or an integer 
array of indexes, use the expression from the following example:  
  a={1 2 3 4 5 6}   # we want to delete elements from it 
  a=a[2:4]          # retain only elements 2:4 
  a={1 2 3 4 5 6}    
  a=a[{2,3}//{5,6}] # retain only 4 elements elements  
  a=Count(100) 
  a=a[Count(1,10)//Count(21,30)]  # retain ranges 1:10 and 21 to 30 
Deleting table elements table rows can be deleted directly with the delete command, e.g.
  
 delete t.A>1 
 delete t[{1 3 5}] 
 
 
 delete alias
 see 
 alias delete alias_name . 
Example:
  
alias ls list 
alias delete ls 
 
 
 
 
 
 
 delete molcart table s_dbtable [connection_options]
 
Deletes table from Molcart database with all index tables, related indexes and metadata.
Database connection may be specified by  connection_options 
 
 | Delete plots from the table | 
 
 
 delete plot table [name=s_handle]
 
This command deletes from the table all plots or only the plots with the specified name (see make plot).
 
ICM table plots are stored in
the table header as an sarray T.plot, so 'delete plot T' is identical to 'delete T.plot'
 
 | delete selection variable | 
 delete as_selectionName
 or
 delete  vs_selectionName
 delete named variable with atom or v_ selections.  
The number of named selections is limited to about 10 in each category, therefore 
you may need to delete them from time to time.
 Important: keep in mind that deleting the named selection is not the same  
as deleting actual objects, molecules or atoms selected by them.   
To delete atoms selected by a named variable in an non-ICM object,  
add keyword atom (see delete atom nameSelection )
 Examples:
  
 build string "ASFGD"      # build a molecule  
 vsel = v_//phi,psi    # this is a vselection  
 delete vsel 
 
 asel = a_//c*,n*      # this an aselection (atom selection)  
 delete asel           # delete variable asel, do not touch the atoms 
 delete atom asel      # delete atoms in a non-ICM object 
 
 
 
 
 delete variable array {i_elementNumber|I_elementNumbers}
 
delete one or more elements from any array.
If the array is a column in a table T, use the delete T[i] command which
can delete both a single row, e.g. delete t[2], or a row selection.
 
Examples:
 
a={1 2 3}
b={1. 2. 3.}
c={"a" "b" "c"}
delete variable a 2  # deletes the 2nd element of the array
show a
 {1 3}
delete variable b 2
delete variable c 2
#
a = Count(100)
delete variable a Count(50)*2 # deletes even numbers
 delete variable pairdistArray I_pos
 
Removes elements at positions I_pos from the array
 
 delete as_atoms
 
 delete atoms as_namedSelection 
 delete selected atoms in a non-ICM object. The selection 
here must be a constant atom selection, rather than a 
named selection (e.g. you can say delete a_/1:10/* 
but NOT aaa = a_/1:10/* , delete aaa ).
 To delete a named variable, use delete atom name 
Example:
  
  read pdb "1crn" 
  delete a_/1:10/*   
 
  aaa = a_/18:20 
  delete atom aaa 
See also: build atom , delete hydrogen 
 delete directory  s_Directory
 delete directory. Example:
  
delete directory "/home/doe/temp/" 
See also: 
| command | comment | unix equivalent | 
|---|
 | delete system s_f1 | delete a single file | rm file1 |  | copy-systems_f1 s_f2 | copy a single file | cp file1 file2 |  | rename system s_f1 s_newname | rename/move a single file | mv file1 file2 |  | set directory s_dirname | change directory (cd) | cd dirname |  | make directory s_dirname | make a directory | mkdir |  | Path ( directory ) | returns the path to the current directory | pwd |  | Sarray ( s_filename_filter directory [ all ] ) | returns the file list array, all goes to subdirectories | ls -1 [-R] namepattern |  
 
 
 delete system s_fileName s_fileName ...
 
delete external file.
 
Example:
 
delete system "/tmp/aaa"
 
See also other internal icm equivalents of the system commands that allow to avoid new threads.
 
| command | comment | unix equivalent | 
|---|
 | copy-systems_f1 s_f2 | copy a single file | cp file1 file2 |  | rename system s_f1 s_newname | rename/move a single file | mv file1 file2 |  | make directory s_dirname | make a directory | mkdir |  | set directory s_dirname | change directory (cd) | cd dirname |  | delete directory s_dirname | delete an empty a directory | rmdir |  | Path ( directory ) | returns the path to the current directory | pwd |  | Sarray ( s_filename_filter directory [ all ] ) | returns the file list array, all goes to subdirectories | ls -1 [-R] namepattern |  
 delete session
 deletes all previous history lines. Example:
  
call _macro 
delete session 
 
 delete hydrogen as
 
 delete hydrogen chem [all]
 delete selected hydrogen atoms in a non-ICM object or a chemical array. See also 
 build hydrogen. To delete hydrogens 
in an ICM object, strip it first.
 
When the hydrogens are deleted in a chemical array, the default is to preserve the chiral hydrogens in fused rings (the regular chiral hydrogens will still be deleted).
To delete all hydrogens use option all . In the latter case when the hydrogen carrying the stereo bond is deleted for all heavy atoms including fused rings and the stereo bond will be reassigned to one of the heavy atom neighbors.
 
Example:
 
build string "ASD"
strip # makes a non-ICM object
delete hydrogen a_/2,3/h*
#
group table t Chemical("[C@@](C)(N)[H])O") "mol"
delete hydrogen t.mol all # all hydrogens gone
 
 delete { object |  os }
 delete molecular object. Make sure that you specify an object selection 
(  a_1crn. is correct,  a_1crn.*  or  a_1crn.//* 
is INCORRECT.)  
To delete an object from a selection variable ( as_out,as2_out or  as_graph, 
or any use defined aselection variable), use delete atom as_namedSelection  
(e.g. delete atom as_graph ) or specify the selection level explicitly.
 Examples:
  
   delete object          # delete ALL molecular objects 
   delete a_*.            # delete ALL molecular objects  
   delete a_2,4.          # delete objects number 2 and 4  
   delete a_2a*.          # delete objects with names starting from 2a  
 
   read pdb "1crn"        # load crambin  
   convert                # create the second object named 1crn_icm  
                          # from the pdb object  
   delete a_1.            # delete the 1st pdb-object  
   delete Object( as_graph )  # graphical selection  
 
 delete [ molecule ] ms
 delete separate molecules from molecular objects. The integer reference 
number(s) of molecule(s) which can be shown by the 
 show molecule 
command and used in molecule selections are redefined after deleting or 
  moving molecules from or in the ICM-tree, respectively.
 To delete a molecule from a selection variable (as_out,as2_out or as_graph, 
or any use defined aselection variable), use  
 delete atoms as_namedSelection (e.g. delete atom as_graph ) 
for non-ICM objects, or use the Mol function to specify the selection level 
explicitly (e.g.  Mol( as_graph ) ).
 Examples:
  
   read pdb "2ins"        # load insulin with water molecules  
   delete a_2ins.w*       # delete water molecules  
   delete atoms as_graph  # deletes selected non-ICM atoms/molecules 
   delete Mol( as_graph )  # deletes selected non-ICM atoms/molecules 
 
 
 delete bond as_singleAtom1  as_singleAtom2
 delete a covalent bond between two selected atoms.  
This command is used to correct erroneous connectivity guessed by the read pdb command. 
It is particularly important when you are going to create a new ICM-residue using the 
 write library command and the entry  to it in the icm.res or your own residue file  
(it has the same format).  
In interactive graphics mode you may type delete bond and then click two atoms with the CTRL 
button pressed.
 Examples:
  
   read pdb "newmol"              # automatic bond determination is not perfect  
   delete bond a_/3/cg1 a_/5/ce2  # disconnect two carbon atoms  
See also: make bond and make bond atom_chain . 
 
 delete boundary
 an auxiliary command to free additional memory allocated by the  
make boundary command.
 
 
 | delete columns in a table | 
 
 
 delete column T [inverse] [ I_cols | S_cols | selection | iarray | rarray | sarray | parray | i_from [ito] ]
 
 delete columns in a table T. Option inverse keeps the specified columns and delete the rest.
 You can select columns in multiple ways:
 
by array of indexes : e.g. 3//4//5
by array of column names : 
by GUI selection:
by column type: e.g. rarray sarrayby column index range: e.g. 3 (meaning all except column 1 and 2)
 
Example:
 
   add column t 1//1 2//2 3//3 'a'//'b' 5.5//5.5 6.6//6.6 's'//'s'
   delete column t 3  # starting from column 3
   delete column t 3 5 inverse  # all except 3,4,5
   delete column t iarray rarray 
   delete column t 't.A'//'t.B' inverse # delete all except columns 'A' and 'B'
 
See also: rename column tab ..
 
 delete conf i_stackConfNumber [os_obj]
 
 delete conf i_confNumberFrom i_confNumberTo [os_obj]
 
 delete conf I_stackConfNumbers [os_obj]
 delete a specified conformation from the stack or a series of conformations 
starting from i_stackConfNumber to i_stackConfNumberTo .
An integer array of indices can also be provided.
 
if the os_obj argument is provided the changes above will be applied to the local stack in the object.
 
See also:
 
 
 
 delete drestraint [ as_1 [ as_2 ] ]
 delete distance restraints formed between specified atom selections  
 as_1 and as_2. 
If no selection is specified all distance restraints are deleted
 Examples:
  
   delete drestraint a_mol1 a_mol2       # intermolecular restraints  
 
 
 delete label [ i_StringLabelNumber  ]
 delete graphics string label (text in the graphics window). These strings have no 
unique identification names, they are just numbered. Numbers are compressed as you 
delete some labels from the middle of the list.
 Examples:
  
   delete label # deletes all labels
   delete label 1  # delete the first displayed label  
See also: 
 
 | delete labels from 2D chemical spreadsheets | 
 
 
 delete label chemarray [all] [index=I_]
 
deletes atom annotation in 2D chemical spreadsheet. 
Without the all option the command will only remove labels from the selected atoms, 
otherwise all labels will be removed. The selection can be done in the GUI and it appears as a green halo around select atoms.
 
Example:
 
# create annotated chem table
add column t Chemical({"CCCCN","CCCNCCC","CC(=O)O","C(=O)O"}) 
add column t Predict( t.mol "MolpKaBase" ) name="pkab"
add column t Predict( t.mol "MolpKaAcid" ) name="pkaa"
set label t.mol t.pkab window = {0.,14.}
set label t.mol t.pkaa window = {0.,14.}
# now delete it
delete label t.mol all
See also: set label chemical
 
 
 
 
 
 delete link ms
 
delete links to sequences and alignments for selected molecules
 
 delete link variable
 
delete all groups of linked variables (e.g. unlink the variables), see also link variables .
 
 *delete { *map |  s_mapName }  
  
delete s_mapName or all maps.
 
 
 delete sequence [ seq_1 seq_2 .. ]
 delete sequence { selection | compress | protein | peptide | nucleotide | unknown | swiss }
 
 delete sequence i_minLen i_maxLen
 
(to delete a sequence form alignment use the only option, see below).
 
 
selection : delete the sequences selected through GUI. 
compress : delete the sequences not included in the alignments, i.e. 
   freely floating sequence not included in any alignments, (compare with the compress option of delete )
protein or peptide will delete only amino-acid sequences, 
nucleotide will delete only DNA or RNA sequences, 
unknown : delete sequences with more than 20% of 'X' or 'x' residues. Note that this option changed its meaning. Previously it was same as compress.by sequence length, (e.g. delete sequence 1 50 )
 delete sequence n_seq_at_the_end_of_seq_list
 delete sequence [  i_minLength  i_maxLength ]  # delete OUTSIDE range.
 
  
no arguments: delete all ICM-sequences 
one integer argument: delete last n sequences from the sequence list
two integer argument: delete sequences shorter than i_minLength or longer i_maxLength 
 Deleting some sequences from an alignment but not deleting sequences themselves
 
 delete alignment only selection 
 
 delete alignment only seq1 seq2 ... 
 
To delete sequences selected via the graphics user interface from an alignment without 
deleting them from the shell. 
Example 
  
  delete sh3 only Fyn 
  delete sh3 only selection 
 
 
 
 delete site seq  [{s_Site|i_number|I_numbers|pattern=s}]
 
 delete site ms1  [{s_Site|i_number|I_numbers|pattern=s}]
 
 delete site rs  
 delete the sites of the selected molecules. The sites can be specified 
by their name, or number, or residue selection. All sites are deleted by default.
 Example:
  
   nice "1as6"          # has 3 sites, one in each molecule.  
   delete site a_1.1 {1} 
   delete sites         # delete all of them 
See also: site
 
 delete sstructure seq_1 seq_2 .. 
 delete sstructure select
 delete the assigned secondary structure to prepare the sequence for 
the secondary structure prediction (see the Sstructure function).
 The selection option allows one to delete secondary structure only for the sequences  
selected through GUI.
 
 
 
 delete site ali [i_number] [I_box]
 
deletes annotation in the alignment by i_number or inside the I_box. 
See also: set site alignment
 
 
 delete disulfide bond [ all ] [ { rs_Cys1 rs_Cys2 | as_atomSg1 as_atomSg2 }]
 delete specified or all disulfide bridges in ICM objects.
 Examples:
  
           # SS-bond specified by residue, or  
   delete disulfide bond a_/15 a_/29         
           # by atoms 
   delete disulfide bond a_/15/sg a_/29/sg   
           # remove all SS-bonds in the current object 
   delete disulfide bond all                 
See also: 
 make disulfide bond and  (important!) 
 disulfide bond.
 
 delete peptide bond [ as_N as_C ]
 delete specified extra peptide bonds in ICM objects (e.g. imposed to form a cyclic peptide).
 Example:
  
   delete peptide bond a_/15/c a_/29/n  
See also: 
 make peptide bond and peptide bond. 
 
 delete stack
 delete the main stack of conformations in ICM shell.  Be careful,
there is a single share stack in the shell (deleted by this command) and 
each ICM object can also store a compressed stack of conformers.
 See also 
 read stack, 
 read stack, 
 write stack, 
and  
 delete conf.
 
 
 | delete conformational stack inside an object | 
 
 
 delete stack os
 
deletes the compressed stack inside the specified object. 
 
See also:
 
 
 
 delete parray[i_index]
 
 delete parray[I_index_list]
 
deletes specified elements from a parray.
 
 
 
Example:
 
C = Chemical({"C","CC","CCC","CCCC","CCCCC"})
delete C[{1,3,5}]
delete C[1]
 delete { T_table |  table_expression }
 delete the specified complete table or just the entries selected 
by the expression.
 Examples:
  
   group table t {1 2 3} "a" {4. 5. 7.} "b"   
   delete t.a == 2       # the second entry  
   show t 
   delete t[2]           # the second entry  
   show t 
   delete t              # the whole thing  
   group table t {1 2 3} "a" {4. 5. 7.} "b"   
   delete t.a > 1          # 2nd and 3rd
 
 delete term s_terms
 switch off the specified terms of the energy/penalty function.
 Examples:
  
   delete terms "tz,sf"    # do not consider tethers and solvation contributions  
 
 
 
 
 delete selftether [ as] 
 
deletes internal tethers for selected (or all atoms)
 
See also:
 
 delete tether [ as]
 
delete tethers of the specified atoms (  as_ ),  
if no selection is specified all tethers in the current object are deleted. 
 
 delete tether loop [ as] 
 - this tool deletes tethers for residues flanking insertions and deletions (one residue on each side), as well as N- and C- termini. The tool is used to help the minimize tether command to build a more relaxed loop or end.
 
 
 | delete a tree from a table header array | 
 delete variable treeParray i_treeIndex
 
deletes a tree object (generically considered as a parray )
 
Example:
 
make tree T  
delete variable T.cluster 1
 
 | delete selected chemical fragments | 
 
 
 delete chemical chemarray
 
deletes selected parts of the chemicals. See select chemical command.
 
 
 [ display model | Display new | Display offscreen | display origin | Display rotate | display stack | display box | display clash | display drestraint | display gradient | display grob | Display grob label | display hbond | Hbond color | display label | display map | Display trajectory | display ribbon | display site | Display skin | display slide | display string | display tethers | display volume | display window | Display gui ]display molecules or graphical objects 
 display [wire|cpk|ball|stick|xstick|surface|skin|ribbon [base]] [as [as_2]] [ color ] [virtual] [center [center_options]]
 
 display [transparent] [stick|skin|ribbon [base]] [as [as_2]]   
 display specified graphics primitives for selected atoms or residues.
 
 Once something is displayed and your cursor is in the graphics window 
you may rotate, translate, zoom and move both clipping planes with the mouse 
and keystrokes.
 To refer to the base part of DNA/RNA represented as ribbon , use the additional 
specifier called base, which can be separately displayed and colored. E.g.
  
 makeDnaRna "ACTG" "mydna" yes yes "dna" 
 display ribbon  
 color ribbon base a_1 blue 
 Display surface atoms may be defined by TWO arbitrary selections  
(it would mean: display surface of atoms as_1 as they are surrounded by atoms as_2 ) 
Note that the GRAPHICS.hydrogenDisplay preference may affect the displayed atoms. 
To be able to display all atoms set GRAPHICS.hydrogenDisplay to "all".
 Defaults: wire representation, all atoms (corrected by the GRAPHICS.hydrogenDisplay),  
coloring according to atom type.
 color options
 The color can be specified by a number of ways (see the color command for a more detailed description) : 
  Color (e.g. red ),  s_Color  (e.g. "red"), numerical color:
 i_Color | r_Color | I_Color | R_Color [ window= R_2minmax ]
 The window array of min and max values allows one to clamp the value you want to map to a color to the specified  
range.
 Other options:
 center  : will perform the center command on the displayed object(s).
 transparent  : will display the ribbons, skins or sticks as transparent objects,
  
read pdb "1crn" 
display transparent ribbon 
display skin transparent 
 display surface refresh  : will rebuild the surfaces with new GRAPHICS.surfaceDotSize values.
 intensity= r_fraction : renders the image with fractional intensity by merging the source display image with the  
background.
 virtual : additionally displays the coordinate axes, virtual atoms and virtual bonds starting from the origin.  
It is a good way to visualize the whole ICM molecular tree as it grows from the origin.  
This option is applicable only to the ICM molecular objects.
 More examples:
  
 build string "AFSGDH;QWRTEY"       # two peptides 
 display                        # display current object and color atoms   
                                # according to atom type  
 display a_1 red                # display the first molecule and color it red  
 display skin a_/5 a_* yellow   # display skin of the 5th residue  
                                # as surrounded by all the atoms  
 display ribbon                 # display ribbon for all the residues  
 
 read pdb "2drp"                # a pdb file 
 assign sstructure a_a/123:134,153:165 "H"       # No sstructure in 2drp  
 assign sstructure a_a/109:114,117:121,141:144,147:151 "E" 
 display a_a ribbon red                          # two Zn-fingers  
 display a_a/113,116,143,146/!n,c,o xstick blue  # Cys residues  
 display a_a/129,134,159,164/!n,c,o xstick navy  # His residues  
 display a_m,m2 cpk magenta                       # Zn-atoms   
 adna1=a_b//p,c3['],c4['],c5['],o3['],o5[']      # two DNA chains   
 adna2=a_c//p,c3['],c4['],c5['],o3['],o5['] 
 display adna1 xstick white 
 display adna2 xstick aquamarine 
 display adna1 adna1 surface white 
 display adna2 adna2 surface aquamarine 
 center 
 display "Zn-finger peptides complexed with DNA" pink 
 
# display 4 chains of insulin as 4 thick worms colored from N-to C-terminus 
 read pdb "2ins" 
 color background blue 
 assign sstructure a_/* "_"  # thick worm representation 
 GRAPHICS.wormRadius= 0.9 
 display a_/* ribbon only 
 color a_1/* Count(1 Nof(a_1/* )) ribbon 
 color a_2/* Count(1 Nof(a_2/* )) ribbon 
 color a_3/* Count(1 Nof(a_3/* )) ribbon 
 color a_4/* Count(1 Nof(a_4/* )) ribbon 
 
# examples of DNA and RNA ribbons 
 nice "4tna" 
 resLabelStyle = "A" 
 display residue label 
 color residue label a_/?u gold # ??u also selects modified Us 
 color residue label a_/?a red 
 
 
 | display new: refresh or unclip view | 
 
 
 display new 
 
 display restore  
 
 display restore plane 
 
commands to mimic some of the interactive controls.  
These commands are primarily used in GUI commands ( see icm.gui file) and scripts/macros. 
 new :  
rebuilds some graphical representations (e.g. your as_graph has been 
changed in the shell and you need to refresh the image, or 
you changed the orientation and want to redisplay the labels 
elevated above the skin surface by resLabelShift ).
 restore :  
a softer action than new .
 restore plane :  
moves the clipping planes beyond the displayed objects  
(keystroke: Ctrl-U, or the 'Unclip' button) .
 
 
 display off [ i_Width i_Height ]
 Sometimes you want to generate some images in a script without opening an explicit graphics 
window. The display off command opens an off-screen rendering buffer  
of i_Width by i_Height size in pixels, in which all the usual display/color/undisplay/center  
commands work as usual. 
 NOTE: one cannot have both off-screen and on-screen displays in one ICM session.
 An example script (can also be performed interactively):
  
   display off 400 300 
   nice "1est" 
   rotate view Rot( {0. 1. 1.} 50.) 
   write image "est1" 
   unix xv est1.tif 
   set window 700 800  # NB: 'center all' will be applied 
   write image "est2" 
   unix xv est2.tif 
   display a_/4/o cpk 
   center a_/3,4 
   write image "est3" rgb 
   unix xv est3.rgb 
   build string "se ala trp" 
   display off 400 300 
   display skin 
   write image "est3" rgb delete 
   unix xv est3.rgb 
 
 display the axis of the coordinate frame. The length of the arrows is defined by the axisLength parameter. 
Use undisplay origin to undisplay it. 
E.g.
  
 read pdb "1crn" 
 display 
 display origin 
 undisplay origin 
 
 | Setting rotation or rocking mode | 
 display rotate [on|off]  [ i_NofCycles ] [pause]
 
The graphics view can be set so that molecule is continuously rotating or rocking, but the ICM session remains interactive.  
This mode can be set with the above command. The style of continuous
interruptable movement is controlled with the GRAPHICS.rocking 
preference.
 Specifying the number of rotation or rocking cycles i_NofCycles is useful for
movie making. The pause option forces the command to finish the 
requested number of rotations before proceeding to the next commands,
as opposed to just launching the rotation and proceeding with the rest of the script.
 
 Example:
 
GRAPHICS.rocking = "xY-rocking"
display rotate on 3 # three cycles
 
See also:
 write movie  , GRAPHICS.rocking
 
 
 
 display stack [ os_withStoredStack ] [iFrom iTo] [loop [=nCycles]] [r_NofInterpolationFrames [simple|cartesian]] [center] [reverse] [sstructure] [auto]
 
interpolated display of conformational stack of its parts.
Aruments and options:
 
optional os_withStoredStack . If this argument is missing, the global stack will be used. With the argument the built-in local object stack will be played out.
optional start and end frames:  iFrom iTooption loop [ = nCycles ] : the command makes a video loop and repeats it 99999 times. Optional nCycles redefines the number of repetitions.
r_NofInterpolationFrames  [ simple | cartesian ] ]  (e.g. 10.0 cartesian ) : determines the number of intermediate frames. 
  The following interpolations are currently provided:
The default interpolation is simple .simple : just wait for the specified number of frames
cartesian : perform linear interpolation between stack conformations 
option center     : centers on the displayed atoms
option sstructure : recomputes secondary structure for each stack conformation.
option auto       : extracts the number of cycles (1 or endless loop) and the number of interpolated frames ( no interpolation or a fixed number of interpolated frames) from the stack itself. The two parameters can be set with the set stack os loop|fast [off] command. The GUI interface for the object stack display uses the auto option.
option reverse    : toggles iteration between first and last frame back and forth. (Doesn't jump from the last frame to first, instead goes reverse to the first)
 
Example:
 
  build string "ASDFW"
  montecarlo v_//x* mncalls=10 vwMethod=2 # create a conformational stack
  display xstick cpk  only
# the previous commands just prepare stack and display
  display stack 20. cartesian loop=4 center # repeat 4 times and stop
Another example in which the displayed trajectory is dumped into a movie file. 
# make the same preparations
  write movie "peptamovie" on exact
  display stack 20. cartesian loop=1 center # repeat 4 times and stop
  write movie exit
 
 The display stack command is somewhat similar to the display trajectory command. 
The display stack command has the following benefits:
 
One relative disadvantage of the command is that only the cartesian interpolation is available, while
 display trajectory has other types of interpolations ( e.g. cosine weighting, mixed cartesian/angular interpolation) .it recomputes the skin if the skin is present
does not mess up the C-terminus in case of local deformations
does not save or use any external files.
it allows easy looping with the loop [= nCycles ] option.  
 
See also:
 
 
 display box [  R_6boxCorners ]
 display graphics box specified by x,y,z coordinates of two opposite corners of a parallelepiped.  
This box can be resized and translated interactively with the Left and Middle mouse buttons:
  
Resizing: Grab a corner of the box with the Left-Mouse-Button and drag it to resize the box 
Translating: Grab a corner or a center of the box with the Middle-Mouse-Button and translate 
 
See also the 
 Box () function which returns six parameters describing the box. 
 Examples:
  
   build string "se ala his gly met" # a peptide  
   display 
   display box                      # the default box   
   display box {0. 0. 0. 2. 2. 2.}  # define position/size 
   display box Box(a_/2 )           # surround the a_/2 by a box  
   display box Box(a_/2 1.2)        # or add 1.2A margin 
 
 
 display clash [ as_1 ] [ r_clashThreshold ]
 display all the interatomic distances for selected atoms which are 
shorter than the sum of van der Waals radii multiplied by the 
 r_clashThreshold parameter. The default value is taken from the 
 clashThreshold variable. Initially it is set to 0.82 but can be redefined.  
IMPORTANT: this will work only for the ICM-objects. For hydrogen bonded atoms 
the threshold is additionally multiplied by 0.8.  
Use the show energy "vw" command (and pay attention to the current fixation)  
to precalculate interaction lists.
 This command may show some irrelevant short contacts.  
 calcEnergyStrain , display gradient , etc. seem to be more informative.
 See also: 
 GRAPHICS.clashWidth , clashThreshold , 
 show clash, undisplay and atom energy gradient (force) analysis with: 
 show a_//G or display a_//G.
 Example:
  
 read object s_icmhome+"crn" 
 show energy "vw" 
 display a_
 display clash                  # all clashes, default clashThreshold=0.82
 undisplay clash 
 display clash a_/11 0.95  	# distances < (R1+R2)*0.95  
# this is an alternative method which analyzes the gradient 
 selectMinGrad = 100.   	# analyzes forces greater than 100 
 display ribbon grey 
 display Res( a_//G )  
 display gradient a_//G 
 color Res( a_//G ) ribbon magenta    
 
 
 display drestraint  as
 displays 
  drestraints, 
  disulfide bonds, and 
  peptide bonds imposed on selected atoms.
 See also: 
 read drestraint, 
 set drestraint, 
 make disulfide bond, 
 make peptide bond, 
 make drestraint.
 Example:
  
  build string "se ala his trp ala gly gly" 
  display 
  set drestraint a_/1/hn a_def.a1/6/o 2  
  show energy "cn"
  display drestraint 
  minimize "vw,14,to,cn" 
 
 
 display gradient  as
 display vectors of energy derivative with respect to atom positions or selected 
atoms  as_ 
.
 Important: the gradient must be pre-calculated by using one of the 
following commands: show energy or minimize . 
The values of gradient components (lengths of vectors for each atom) 
can be shown by 
 show gradient as_. 
When a gradient vector is displayed, two transformations are performed: 
it is scaled and colored to represent the range of values in the most 
convenient and natural way while still being able to deal with a wide 
range of gradient values from negligible to 10 to the thirtieth power, as 
may be the case for a strong van der Waals clash. When all gradient vectors 
are under 20 kcal/mole*A they will be colored by the "cold" colors 
(blue...green...yellow) and will be assigned a length less than 2 Angstroms. 
If you see a red and long vector you may have a problem. Check it by 
zooming in and using show gradient as_. 
You can also select only atoms with gradient greater than the threshold value 
 selectMinGrad by typing a_//G 
and display only specified strained atoms. It helps to get rid of 
little blue arrows for unstrained atoms.
 Examples:
  
 build string "ala his trp glu leu" 
 randomize v_//phi,psi 
 show energy 
 selectMinGrad= 20.
 display a_ 
 display gradient a_//G 
 
 
 display grob [ solid ][ smooth ][ dot ][ reverse ] [ transparent ]
 display g_Name1 g_Name2 ... options
 display grob selection ... options
 display all, specified, or graphically selected  graphics object(s) . 
They are referred to as  grob in the ICM-shell and as "3D meshes" in the 
GUI interface.   
 The display grobs command will display all existing graphics objects.  
Options:
  
One can also color and undisplay graphics objects, as well as connect to them. dot will show only dot-vertices of the object.  
 reverse to invert lighting; this option will change directions of  
  the grob surface normals (will turn the grob inside-out) 
 smooth enforces the Gouraud shading method to smooth the solid surface.  
 solid allows solid surface representation of the object and requires that  
 the original object has information about triangles forming the solid surface. 
 transparent makes solid grob transparent 
 Examples:
  
   read matrix s_icmhome+"def.mat"    	# 2D sin(r^2)/r^2 function of a grid 
   make grob solid def      		# convert matrix into a graphics object g_def 
   display g_def smooth     		# a hat of the 22st century  
   rotate view Rot({1. 0. 0.}, 45.)     #  
   display g_def reverse    		# shine light from inside the head 
   display grob smooth transparent 	# like Lenin in Mausoleum  
 
 display g_label [bold ] [ italic ] [ underline ] i_Size [font=s_FontName] [rgb=R_3rgb|"#xxyyzz"]
 
displays g_label text (technically it is a grob with a single point and
associated text) in a particular font. 
 
Example:
 
read pdb "1crn"
display a_
label3d = Grob("label",Mean(Xyz(a_/3,4)), "3D label for res 3,4")
set font label3d times 36 rgb="#00ffdd"
display label3d
select edit label3d # makes it movable, press Esc to get rid of the cursor
 
 display hbond [ as ] [ r_maxHbondDistance ] [ only ]
 Only hydrogen bonds of the current object may be displayed.  
Before calling this command, you should use any of the following commands: 
 show hbond, show energy, minimize 
to calculate the list of hydrogen bonds. The real argument 
 r_maxHbondDistance defines an upper bound of the distance 
between a hydrogen and a potential hydrogen acceptor to place 
the pair to the hydrogen bond list. (Default value of 
 r_maxHbondDistance parameter is 2.5 A.) The list is 
recalculated for each new loaded molecular object. 
Hydrogen bonds on display are colored according to their 
hydrogen-acceptor distances. The option only allows one to 
display hydrogen bonds without corresponding molecular object. 
Longer and shorter H-X distances in the hydrogen bond are color-coded, from red 
to blue, respectively.
 For ICM object the hydrogen bonds are calculated much faster because the atom pairs
are precalculated. However, the displayed hydrogen bonds will then depend on how the
model was fixed. No hydrogen bonds will be shown inside rigid bodies.
 
  The color or hydrogen bonds will be calculated according to a calculation involving
the effective lone pair density (see hbond color ).
 
See also: 
 undisplay hbonds, 
 show hbonds. 
 
 
 | Strength and color of a hydrogen bond | 
 
 
The hydrogen bonds created or displayed with the make hbond or display hbond
commands are colored according to the estimated 'strength' of this hydrogen bond.
This is just an estimate since the energy of hydrogen bond is not easily decoupled
from the van der Waals and electrostatic contributions between the hbonded atoms 
and their immediate environment. In ICM the strength is estimated using the following
procedure described in J Med Chem. 2003 Jul 3;46(14):3045-59.
 
For a hydrogen bond acceptor atom A(i) and a hydrogen atom H(j) located at
 rj, the hydrogen bonding interaction was estimated 
 
 Fang(phi)Fdist (rLPi -rj) 
 
, where phi is an angle formed by the hydrogen bond acceptor atom, 
hydrogen, and the hydrogen bond donor,
and rLPi is the radius vector of the center of the lone electron
pair (LP) closest to the hydrogen. The angular function used
 was defined as Fang = 1 - cos(k*phi) . Parameter k is accessible as GRAPHICS.hbondAngleSharpness in the shell. Distance function
 Fdist (rLPi-rj) was constant (1.0) within LHB/2 from the lone pair
center and dropped as
 
 exp(  -(((rLPi - rj)/LHB) - 0.5)2  )  .  
 
 
beyond that distance, where LHB is the characteristic range of
hydrogen bonding interaction (value of L=1.6 �was used). Lone
pair centers were placed at 1 �from the hydrogen bond
acceptor atom, assuming symmetrical planar trigonal configuration
for sp2 atoms and tetrahedral configuration for sp3
atoms. The resulting functional dependence reflects (at least
qualitatively) the physical nature and observed statistics of
the hydrogen bond interactions. The interaction is maximized
when the hydrogen atom is pointing directly to the acceptor
atom along a lone pair axis and drops quickly as the hydrogen
is moved farther away. The strength declines more gradually as the
hydrogen moves out of the LP axis or, as hydrogen bond donor,
hydrogen atom, or hydrogen bond acceptor, move out of
alignment. 
 
See also:
GRAPHICS.hbondMinStrength
 
 display [{ atom | residue }] label [selection]
 display variable label v_selection
 a graphics label with atom name, residue name, 
variable name for all or selected atoms, residues or variables respectively.  
The text of this label is not user-defined, although 
you can control it in two different ways. First, residue label style can 
be set using either Ctrl-L in the graphics window or 
 resLabelStyle 
preference , and variable label style either by Ctrl-V, or setting 
 varLabelStyle preference.  
Second, the ICM-shell string variable s_labelHeader 
defines a prefix string for all labels. For example, if you display CPK 
atoms you may move the label to the right from the atom center by 
 s_labelHeader="     " .
 The _aliases file has convenient aliases  
(e.g. ds for display, unds for undisplay, re , for residue, va for variable)  
for those of us who like typing commands. In this case you may just type  
 ds va la to display variable labels, etc.
 Examples:
  
 build string "FAHSGDH" 
 display a_
 display residue label #  
 undisplay label 
 display residue label a_/his 
 display variable label v_//phi,psi 
 display variable label v_//* & as_graph 
 display atom label a_/1:3/* 
 undisplay label 
# or with aliases: 
 ds re la a_/1,3 
 unds la 
 .. etc. 
 
 
 display { map | map_name } [ I_colorTransferFunction ] [ R_2RangeOfMapValues ]
 displays a real function defined on a three-dimensional grid (i.e., an electron density map). 
Optional iarray argument defines a color transfer function according to deviation from the mean.
 If you provide an explicit range of map values ( R_2RangeOfMapValues ), the 
map values will be clamped into this range, divided into Nof( I_colorTransferFunction ) 
subranges, and colored according to the values of I_colorTransferFunction :
  
To undisplay the bounding box reset the GRAPHICS.displayMapBox parameter.0 - transparent/invisible 
1 - blue 
maxNumer - red 
 See also the color map command.
 Example:
  
   build string "se his arg"  
   make map potential "el"  Box( a_/1,2/* , 3. )  
   display a_ 
   display map m_el {1 2 0 0 0 0 3 4 5 6} {-20.,100.}
   center
   make grob m_el 2. name="g_1"
   make grob -m_el 1. name= "g_2"  
   display g_1 red 
   display g_2 blue 
In the  display map m_el {0 1 2 3 4 0} {-2.,2.} example, the values will 
be clamped into the -2.,2. range. The range will be divided into 6 sub-ranges: 
 -infnty:-2., -2.:-1, -1:0, 0:1, 1:2, 2:+infnty . The first and the last 
ranges will be invisible (color 0). The four ranges in the middle will be colored 
from blue to red.
 
 See also related commands: 
 read map, 
 write map, 
 delete map, 
 show map, 
 set map, 
 make (1), 
 make (2) 
and file format icm.map .
 
 
 | display trajectory : simulation trajectory | 
 display trajectory [s_TrjFileName] [ i_From [ i_To]] [ r_Smooth1 [ r_Smooth2]] [ as_1] [ center [ as_2 ] ] [ sstructure ] [ imageOptions ]
 lets you play, stop and reverse a Monte Carlo simulation trajectory as well as write 
a series of images for future assembly of those images into movies.
 
Arguments and options: 
Integers i_From and i_To specify the frame range. 
Real values r_Smooth1 and r_Smooth2 determine minimum and 
maximum smoothing parameters (i.e. number of additional frames, inserted 
if conformation change is too dramatic).  For example: 100. 700.
Specifying atom selection 
  as_1  defines a certain fragment on to the 
initial conformation, of which subsequent conformations are superimposed. 
The image saving options include:
  image [ =s_framePath ] [ rgb|targa|png|gif ]
Option image  allows one to automatically save a series of image files 
in the s_framePath argument of the image= option or in the default s_tempDir directory.  
center option with selection   as_2  
determines a fragment for graphics window centering (all, if center without as_2 ). 
 
To obtain the trajectory info use  
 read trajectory s_TrjFileName
 When playing a trajectory, you 
can use ICM interrupt ( Ctrl-\ ) to stop, and then toggle stepwise frame playing, 
reverse, or quit playing. The default is to play a whole trajectory without 
smoothing, superimposition or centering. 
Example:
 
 build string "ala ser ala thr ala glu ala"
 mncallsMC=10000                         # 
 montecarlo trajectory
 read trajectory "def"
 ds ribbon, wire
 ds trajectory center sstructure  10.
 Notes:
 
do not forget to start ICM with the  -24 flag to double the image quality.
set IMAGE.generateAlpha to no  if you want to keep the background colored and not transparent. 
 
Allowed image formats are: rgb, targa, png, gif .  
The file extensions will correspond to the image file format. 
The image file names consist of the default path and name, appended with  
the frame number. Example:
  
 display trajectory image="/tmp/f"  
 /tmp/f_1.png 
 /tmp/f_2.png 
 ... 
 s_tempDir = "/home/jack/X" 
 display trajectory image rgb 
 /home/jack/X_1.rgb 
 /home/jack/X_2.rgb 
 ... 
 All the other image preferences may be predefined by the IMAGE table.
 Option sstructure will dynamically reassign secondary structure 
while going through conformations of each frames. This option is 
very useful if you perform peptide/protein simulation and want 
to see if secondary structure elements are forming transiently.
 See also: trajectory file.
 
 
 
 
 
 display ribbon rs  color
 
 |   | displays protein or DNA backbones in ribbon presentation. | 
 See also:
 
 
 
 display site  rs color
 display site information. 
Switch between different types of the site information with the SITE.labelStyle preference. 
By default only non-zero priority sites are displayed.
 
 
 | display skin or dotted surface | 
 
 
 display { skin | surface }  as_1  as_2 
 
 display skin as_1  molecule
 display analytical molecular surface, also referred to as skin, or solvent 
accessible surface area . 
Each display skin command will delete the previously displayed 
skin in the current plane. 
To display several different skins, use the 
 set plane 
command to change the current graphics plane before 
you issue the display skin command. You can also convert the skin into a 
 grob with the make grob skin command.  
You can co-display many grobs on the same plane, as well as make the grob transparent. 
This grob can be further split into individual shells with the split command.
 
Options:
 
molecule : (for skin) considers each molecule in isolation
 
See also:  How to display and characterize protein cavities. 
 Example:
  
   build string "se ala his glu"  # test tripeptide  
   display                        # the wire model  
   display skin a_/1 a_/1         # skin around the 1st residue or just press <F1> 
   display skin a_1 molecule      # equivalent to a_1 a_1
   set plane move on 2            # key with your cursor in the graphics window 
   display skin a_/3 a_/3         # skin around the 3st residue 
                                  # now you can toggle planes with F2 and F1 
   display surface                # solvent-accessible surface 
 
 
 
 display slide [ reverse | i_slide ] [s_slideProperties] [ view ] [ smooth ] [ add ] ]
 
display the next slide or slide number i_slide . 
Options:
 
which slide to show? if you have just said: display slide  the next slide will be shown, display slide reverse will
show the previous one. A specific slide number i_slide can also be shown ( ICM also understands index=3 ).
view : using only the viewpoint/clipping planes from a slide (see also set view ).
smooth : or smooth= i_transition_time_in_msec  will make a smooth view transition from the current state to the slide view.
 (e.g. display slide smooth or display slide 5 smooth=1000
add : adding representations to the existing display, rather than overwriting the slide (like appending a new graphical layer)
 
You can individuall control which sections of the slide information to use in display slide using
 s_slideProperties . The syntax of this string is the following: 
"sect1on;sect2on;..;-sect3off;sect4off; .."
The section names are separated by a semicolon, and plus and minus are used to switch things on and off
with respect to the default state. The allowed sections include:
 
Examples:| Section Name | Default | Description | 
|---|
 | "layout" | - | if +, sets the layout of ICM windows and panels (if off, preserves the current layout) |  | "activewindows" | + | if +, sets the saved active window or panel in ICM gui |  | "smooth" | - | if +, makes smooth animated view transitions between slides |  | "add" | - | if +, adds the next slide as a layer to the previous, rather than overwrites it |  | "gf" | + | graphical representations (CPK, xstick, skin etc.) |  | "color" | + | colors of representations |  | "labeloffs" | + | restoring slide-specific displacements of residue labels |  | "viewpoint" | + | the view point, zoom, and clipping planes |  | "graphopt" | + | the state and parameters of rotation, rocking, etc. |  | "mol" | + | if - , do not restore any property of molecular objects in main graphics window |  | "grob" | + | if - , do not restore any property of grobs in main graphics window |  | "map" | + | if - , do not restore any property of maps in main graphics window |  | "all" | - | switches all sections, on (+) or off (-) |  
 display slide 4 "-all;+gf;+color"
 display slide 4 "-viewpoint"
 display slide 4 "+smooth" # enforce smooth view transitions
 
 
 display slide show [ index=i_start ] [reverse] 
 
the keyword show switches the program into the slideshow mode and makes smooth transition the default.
Other options are the same as above.
 
Examples :
 
icm -g&
read binary s_icmhome+"example_slideSGC.icb"
display slide
display slide # the next slide
display slide smooth # make a 500msec-transition 
display slide 4 # 5th slide 
display slide 2 view  # enforce viewpoint from slide 7
display slide add 2 # display additional representations from slide 3
 
See also: add slide , set view .
 
 
 display string s_StringText [P_image] [size=r_imageScale] [color_spec] [font_spec] [ r_XscreenPosition r_YscreenPosition ]
 
 | display a text string in the graphics window. Relative X and Y screen 
coordinates (ranging from -1. to 1.) of the string beginning may be 
specified to display the string in a given location. Defaults are 
x = -0.9, y = 0.9, i.e. upper left corner of the screen. |   | 
 The string can be 
dragged later to any location by the middle mouse button.
 
The command supports various formats for specifying the label color color_spec 
and font parameters to characterize the label font font_spec. 
Two fonts are at your disposal: the default font (usually times) and the auxiliary 
font (usually symbol). Both fonts can be redefined by the 
 set font 
command. You can also switch to the auxiliary font and back inside 
the string by backslash-A ( \A). (.e.g "Red: \Aa\A-helix"). You can 
also list and delete your string labels by the 
 list label 
and 
 delete label 
commands. 
 Examples:
  
display string "Crambin"                            # a simple string  
 
display string "Act.site of \Ab\A-lactamase" yellow # Greek beta letter  
 
build string "ala" 
display string Name(a_1.) red 28, 0. 0.9     # first object name  
                                             # in the middle  
                                             # (font size=28)  
 
 
 display tethers [ as ] [ r_minDeviation ]
 displays tethers assigned to the selected atoms   as_   
with deviation larger than r_minDeviation. Tethers can be imposed between 
atoms of an ICM-object and atoms belonging to another object, which 
is static and may be a non-ICM-object. 
(0. by default).
 
 
 
 
 display volume 
 
activates fog from the command line. See also fogStart .
 Accordingly, the undisplay volume switches the effect off.
 
 display window [ i_xLeft  i_yDown  i_xSize i_ySize ]
 
 undisplay window
 
displays/undisplays the graphics window. 
When ICM is started without GUI, it is allowed to specify the window size and position.
 
 See also: set window
 
 display window=s_windowList
 
 undisplay window=s_windowList
 
Displays/undisplays GUI windows and toolbars. s_windowList should be a comma-separated 
list with ICM panel and toolbar names.
 
Also the tool panels:"opengl"     	# undisplays the graphics window
"all"		# undisplays all except graphics window
"alignments""htmls"     
"masterview"  # shows/hides workspace panel
"moledit"   # shows/hides molecular editor window 
"plotdialog"   # shows plot dialog for the current table (in modal mode)
"searchwindow" # show/hides chemical search space window. Chemical pattern can be provided optionally as an extra argument
"columnfilter" # launches column filter dialog for specified table column
"tablesearch" # launches table "Find and Replace" for the active table. Search string can be provided optionally as an extra argument
"processes"   # shows/hides background job list window
"prop"        # 'Display Panel' with multiple tabs (display/light,...)
"terminal""tables"    
 
"moveTools""clipTools""miscTools""viewTools""planeTools""fileTools""selecionTools""tableTools" 
You can also display/undisplay individual tabs from the 'Display Panel'. To do that you need
to append a tab name to the "prop:". 
 
Example:
 
 
undisplay window="prop:light"   # hide 'light' tab from the panel
 
Note: This command does not affect the content of the main working area (the center)
 
Example:
 
read binary s_icmhome + "example_search.icb"
display a_
undisplay window="tables" # hides tables 
undisplay window="all"    # leaves only 3D graphics window
display window="moledit" Chemical("CCO")  # popups Molecular Editor with compound
display window="searchwindow" Chemical("CC[O;D1]")  # popups Chemical Search Space with compound
 display window=s_window center
 
 
 
sets the specified s_window to the center. Windows which may occupy the central position are:
 
"opengl"    
"alignments""htmls"     
"tables"    
 
Example:
 
read binary s_icmhome + "example_search.icb"
display a_
display window="opengl" center # sets graphics window to the center
 
 display window=s_layoutString
 
 
 
Applies the window layout specified in the s_layoutString. 
ICM stores the layout information as a string in a specific format.
Window layout information is stored, for example, in slides.
 
Example:
 
read binary s_icmhome + "example_search.icb"
sl = Slide()
display a_
display window=String(sl gui) #changes the view back to what was before the 'display' command
 
See also: Slide, String slide gui
 
 
 
 
 
 display gui [off] s_window 
 
Obsolete command. See: 
 display window 
 
 
 
 edit  icmShellVariable
 interactively edit the ICM-shell variable using your 
favorite editor defined by the 
 s_editor variable.
 Examples:
  
   edit mncalls   # actually it is easier to type: mncalls=333 
   edit FILTER    # edit a system table, do not change names of components 
# 
  group table t {1,2,3} "A" {"a","b","c"} "B"  	# create a table
  t						#
  edit t					# edit table t 
 
 elseif
 is one of the ICM flow control 
statements, used to realize conditional statements. 
See also: if, then, and endif .
 
 
 endfor
 is one of the 
 ICM flow control 
statements, used to perform a 
 loop in ICM-shell calculations. 
See also 
 for .
 
 
 endif
 is one of the 
 ICM flow control 
statements, used to realize 
 conditional statements. 
See also if, elseif, and then .
 
 
 A command ending a macro .
 Examples:
  
   macro threeEssentialsOfLife          # declare new macro  
                                        # define essentials  
      l_info=no 
      modes={"\n\tOoops!!\n","\n\tOuch!!\n","\n\tWow!!\n"} 
                                        # randomly pick a line  
      print modes[Random(1,3)] 
   endmacro 
   threeEssentialsOfLife                # invoke macro  
 
 | Enumeration of charge states | 
 
 
 enumerate charge {chemarray|chemtable} [r_pH=7] [window=r_window(2.)] [name=s_result]
 
Generates all possible formal charge states at given pH level and window
 
 | Enumeration of stereoisomers | 
 
 
 enumerate chiral chem_array [index=I_selectedChems] [center=i_Max_Number_of_Centers] [name=s]
 
Generates all possible stereo isomers for each chemical compound from  or from selected
chemicals ( I_selectedChems ).  Important: this operation requires that two conditions are
satisfied:
a molecule has a stereo center (i.e. an sp3 atom with four different substituents
if a stereo center has a definite chirality ( "up" or "down", or R, or S) stereo isomers will not be generated. The center 
needs a stereo bond is marked by type "off", or "either" to imply an uncertain chirality or a racemic mixture of two isomers. 
 
Sometimes you may want to skip compounds with number of unspecified centers greater than certain value. In this case
you should provide center = i_Max_Number_of_Centers argument to the command.
 
The command will always generate at least one element for each compound. 
Example:
 
group table t {"CC(N)O","CC(C)C(C)O"} "mol"
enumerate chiral t.mol name="isomers" # creates isomers.mol
 
 
 enumerate tautomer chem_array [keep] [filter] [index=I_index_array] [name='T_tauto']
 Generates all possible tautomers for each chemical compound from . 
Returns the resulting chemical array of tautomers. 
The command will always generate at least one element for each compound.
 
The current function only generates tautomers that preserve
the atom content (does not add or remove hydrogens).
With keep option it'll also preserve the hybridization state of each atom (i.e. does not change sp3 to sp2).
 
Some tautomers are formally possible but chemically do not make much sense.
To avoid generating those tautomers, Split uses the TAUTOFILTER.tab file that 
contains the unwanted or chemically impossible tautomer patterns in the SMARTS 
format.  Feel free to add more patterns to this file.
Use filter option to enable filtering by patterns.
 
Example file:
 
#>T TAUTOFILTER
#>-sm----------------comment
"*C([OH1])=[N;R0]"  "peptide bond"
 
  
 p = Chemical( "C(=C(NC(=N1)N)N2)(C1=O)N=C2" )
 Nof(p) # 1 element 
 1 
 enumerate tautomer p
 show T_tauto
#>T T_tauto
#>-mol---------idx--------
  "C1=NC2=C(NC(=N)NC2=N1)O" 0
  "c1nc2=C(NC(=N)N=c2[nH]1)O" 0
  "C1=NC2=C(N=C(N)NC2=N1)O" 0
  "c1nc2c(nc(N)nc2[nH]1)O" 0
  "C1=NC2=C(NC(N)=NC2=N1)O" 0
  "c1nc2C(NC(=N)Nc2[nH]1)=O" 0
  "c1nc2C(N=C(N)Nc2[nH]1)=O" 0
  "c1nc2C(NC(N)=Nc2[nH]1)=O" 0
  "c1nc2C(=NC(=N)Nc2[nH]1)O" 0
 
 | Combinatorial library enumeration | 
 
 
 enumerate library [simple]  chem_scaffold_R1R2 .. chem_R1 chem_R2 .. \
   [name= s_libTableName|output= s_fileName] [filter=expression]
 
Applies chemical arrays (usually a column in a chemical table) for each of replacement groups chem_R1, chem_R2 etc.
to the first element of the scaffold template array. (also known as enumerate library
 
The scaffold.The scaffold structure needs to be drawn as a Markush structure, e.g. 
 
add column scaffld Parray( "[R2]C(C(=O)[R3])NC(=O)N[R1]" ) name="mol"
 
The replacement groups.Each replacement group in a chemical array (table) needs to have an attachment point specified. 
In the Smiles/Smart representation used in ICM it is marked by an asterisk (e.g. "[C*]CC" ). 
Marking an atom as an attachment point can also be done in the Chemical Editor ( right-click on an atom and
choose the Attachment Point menu item).
 
The output table or file.The output table will contain all combinations .
If the output option is specified the resulting library is saved to a file and
the table is not created. 
Warning: if the number of combination exceeds 20000 the resulting library is saved to a file
automatically (to avoid memory problems).
 
Option name = s_table allows one to change the default name of the output table.
Option output = s_file forces the file output and suppressed the table creation.
 
 The output chemical table has a product column as well as the index of each R-group.
 
simple option toggle a special mode where instead of full enumeration it simply goes through the input substituents and take i-th element from each.
This mode requires that size of all R-group arrays should be the same. The size of the output will be equal to the size of R-group array(s)
 
Dynamic filtering of the output by applying a filter expression.The filter= s_expression option allows one to apply a filter during the
library generation. The filter expression is a double-quoted string
with the following structure:
"Function1 relation value & or | 
        Function2 relation value & or | ..
"
 
Example: 
 
filter = "MolLogP(mol)<5. & Nof_Frags('C(O)=O')<1"
<>
See also:
 
A short form of the enumerate library command and linking. The replacement group arrays can be linked to the R positions of a scaffold with
the link group command. In this case a short form of the command can be used, e.g.
 
link group scaffold.mol 1 r1.mol 2 r2.mol 3 r3.mol
enumerate library scaffold.mol
 
Example:
 
 read binary "example_enum.icb" # contains scaffold and R1,R2,R3
 enumerate library scaffold.mol[1] name=Name( "lib", unique ) R1.mol,R2.mol,R3.mol
 split group scaffold.mol[1] lib.mol   # if you want to split it back
 
The inverse operation: split the library into scaffold and replacement group arrays.A library can be also reduced back to the scaffold and replacement groups using the split group scaffold library 
command.  E.g. split group scaffld.mol combilib.mol
 
See also: make reaction , split group , Replace chemical .
 
 
 endwhile
 is one of the 
 ICM flow control 
statements, used to perform a 
 loop in ICM-shell calculations. 
See also 
 while .
 
 
 exit [ s_message ]
 exit from a script file to interactive mode.  
Do not confuse this command with the exit option in, say,  
 highEnergyAction preference.
 Similar to return [ error s_message ] from a macro .
 To quit the program, use the quit command.
 
 
 [ Find alignment | Find database | Find database fast | Find molecule | Find chemical | Find pdb | Find prosite | find pattern | Find molcart | Find table | Find pharmacophore ]a family of commands for sequence and pattern searches,  
chemical matching, 3D pharmacophore matching, and alignment optimization. 
For chemical matching also see  chemical tables, and the Nof chemical function. 
 | find alignment : automated structural alignment | 
 find ali_initial [ superimpose ] [ r_threshold= 3. [ r_retainRatio= 0.5] ]
 find the best structural alignment of two proteins by refining the 
inaccurate initial alignment ali_initial with the goal of finding  
the largest possible subset of residues which have similar  
local backbone fold in 3D space.
 Option superimpose automatically superimposes molecules according to the 
found structural alignment upon completion of the iterations.   
This command needs a starting alignment of 2 sequences linked 
to the molecules with at least one atom per residue. If Ca atoms are 
not found the atoms carrying the residue label (see the set label command)  
are used.
 Low gap penalties of 1.8 and 
0.1 are recommended for the initial sequence alignment.
 Algorithm : At each step aligned pairs of atoms which are further than r_threshold 
from each other are disconnected so that at least r_retainRatio pairs 
are be retained. Then the molecules are superimposed again and 
new residue pairs are tested and accepted if it leads to a lower overall rmsd. 
Warning: the result strongly depends on the relevance of the starting  
alignment to the best 3D alignment. Sometimes 3D irrelevant sequence alignment 
pairs do not tend to disconnect to allow transformation into a global 3D alignment: 
e.g. if only one pair of elongated helixes is aligned in the starting 
alignment and it is only a small part of an optimal alignment which 
would be completely different, it might not be eventually found.
 
 See also other types of structural searches and superpositions:
  
 find pdb: 
search a database of a single structure for a fragment with a given sequence 
pattern and partial structural similarity (e.g. loop ends match). 
 superimpose: 
performs structural superposition, the command can do it on the basis of sequence 
alignment on the fly. 
 Example:
  
 read pdb "1nfp" 
 read pdb "1brl.b/" 
 rm !Mol(a_*./A ) 
 make sequences a_*. 
 aa=Align(1brl_1_b 1nfp_a) 
 ds a_1.//ca,c,n grey 
 ds a_2.//ca,c,n green 
 superimpose a_1.1 a_2.1 aa 
 center 
 find aa superimpose 
 show aa 
 
 gapExtension = 0.05 
 ab=Align(1brl_1_b 1nfp_a) 
 find ab 4. 0.7 superimpose 
 show ab                         # better 
 
See also:  pairwise alignment   multiple alignment 
 
 
 
 | find database: sequence and pattern searches | 
 find database  [ r_probabilityThreshold ] options
 
 find database exact [ distance= i_nOfMutations]]  options
 
 find database pattern={ s_pattern | S_patterns } options 
 
 find database write [ s_database ] 
 
 find database fast [ = i_speed] [output=s_file] [name=s_tabName] 
# blast like fast search. 
 fast sequence or pattern search through a sequence database.
 The default find database sequence search program performs a full gapped optimal  
sequence alignment, which is a global alignment with zero-end-gap penalties (ZEGA).  
These alignments are more rigorous (not heuristic) than popular BLAST of FASTA 
searches. The latest statistics of structural significance of sequence alignments 
derived for a number of residue substitution matrices will be applied ( 
  Abagyan and Batalov, 1997 ) to assess the probability 
that a matching fragment shares the same 3D fold.  
The  r_probabilityThreshold (default  0.00001 or 5.) option 
defines the lowest acceptable probability of hit. You can also provide a -logP 
number (e.g. 5.5 ) instead of a small probability ( 10^-5 ). 
Threshold of 10/DatabaseSize is usually a safe threshold 
(no guarantees though). Practically 10-7 is a safe threshold for a SWISSPROT search 
(over 0.5M sequences). At 10-4 you may find interesting hits, but a more serious  
analysis may be required to confirm its significance.
 The second version of the command with the exact keyword performs a very fast search  
for identical or almost identical sequences.  The distance= i_maxNofMutations parameter  
specifies the allowed number of mutations.
 find database pattern
 
The third version of the command searches for string patterns in a sequence database.  
The sequence patterns can contain while cards (e.g. "A?[LIV]?\{3,5\}[!P]"). 
This search is very fast. 
 The fourth command find database write is used to export ALL sequences from the blast-formatted 
files into to an external FASTA file defined by output= string  
(default s_databasePath.seq ). This option is the inverse of the 
 write index sequence command which creates 
several BLAST files from a FASTA file.
 The common options are as follows: 
 [ s_databasePath ("pdbseq") ] [ seq_1 .. ] [ ali_1 .. ]  [ output= s_outputFileNameRoot ] [ name= s_tableName ] [ unique ] [ delete ] [ protein | nucleotide | type ]
 Other important variables:
  
 
The output table looks like this and contains the following fields:alignMinCoverage (default 0.5)  
a threshold for the ratio of the aligned residues 
to the shorter sequence length.  
 
alignOldStatWeight (default 1.)  
a parameter influencing the statistical evaluation of sequence comparison. 
To use run-time statistics use alignOldStatWeight=0. 
 
Up to mnSolutions hits will be retained in the final table of hits.  
 
The parallel version of the program will use the number of CPUs defined by the fork command (but not more than is available in your computer). The expected time is inversely proportional to the number of CPUs. 
 
maxMemory is a real ICM-shell-variable defining the size of the database buffer 
memory in Mb used by the command. If this size is smaller than the database, 
the sequences will be loaded in chunks. 
  
#>T SR                                                 
#> NA1 NA2            MI     MX   LMIN    LN     H      ID      SC      pP   DE  
1hiv_a POL_HV1H2      57    155     99  0.665  0.099  100.0  103.69   30.00 "POL PROT.." 
1hiv_a POL_HV1BR      69    167     99  0.664  0.098   99.0  103.62   30.00 "POL PROT.. 
<i>... lines skipped ...</i> 
1hiv_a POL_MLVAV       9    102     99  0.648  0.078   27.3   23.41    5.31 "PROTEASE.." 
1hiv_a VPRT_MPMV     172    272     99  0.799  0.290   29.3   21.95    4.82 "PROTEASE.." 
1hiv_a VPRT_SRV1     172    269     99  0.799  0.290   27.3   21.65    4.72 "PROTEASE.." 
1hiv_a GPDA_RABIT     33    145     99  0.785  0.264   28.3   20.98    4.50 "GLYCEROL3P" 
  
NA1 - the query sequence (a single command can search several query sequences)  
NA2 - the name of the database sequence 
MI : MX - the matching fragment boundaries in the database sequence 
QMI : QMX - the matching fragment boundaries in the query sequence 
LMIN - the shortest sequence length in a pair (query, database sequence) 
LN - log-correction factor (not used in pP but you may want to use it to 
resort the table).   
H - the fraction of the database sequence covered by the alignment 
with the query. If you search against a database of domains this number should be 
close to 1 (e.g. the hit is less significant if your query is only a part of a 
domain). It can be taken into account by multiplying pP by this number. 
ID - percent sequence identity (number of identical residue pairs 
in the alignment divided by LMIN) 
SC - normalized alignment score which is used to calculated 
the Probability. The score depends on the  residue substitution matrix 
and gap penalties. (see the Score function). 
pP =  -log10 ( 
 Probability )  
DE - the database sequence definition 
 Examples:
  
 s_searchDB = s_icmhome + "/data/blast/pdbseq"
 read sequence "GTPA_HUMAN.swi"  
 find database s_searchDB output="gtpa1"  
 find database pattern="C?[DN]?\{4\}[FY]?C?C" s_searchDB margin = 5 
 
 unknown1=Sequence("TTCCPSIVARSNFNVCRLPGTPEAICATYTGCIIIPGATCPGDYAN") 
 find database exact unknown1 s_searchDB margin=1 
 
 | find database fast : fast dictionary-based sequence search | 
 
 
 find database fast [ = i_speed] sequence s_dbFile [output=s_file] [name=s_tabName] 
 
very fast dictionary-based sequence search algorithm. Requires a blast-formated database file.
Options:
 
fast= i_speed  # a number from 1 (slow, rigorous) to 100 (fast and only almost identical sequences). 
output= s_file  # saves the output to a file.
 
Example:
 
read sequence swiss web "1433B_HUMAN" # read one sequence 
find database fast=90 1433B_HUMAN     # search pdbseq database (the default)
 
See also:
 write index sequence command that creates BLAST files from a FASTA file. 
 
 | find molecule: chemical substructure search | 
 
 [ find-sstructure | find-molecule-sstructure ] 
A family of chemical substructure identification commands:
 
 find molecule sstructure [tether] [hydrogen] ms1 ms2 [all]
# substructure or maximal common substructure, equivalent atom pairs in S_out
# all option will add hydrogen
# tries different topologically equivalent permutations to find best correspondence.
 find molecule s_Smile1 { s_Smile2 | S_Smiles2 } [ atom ] [ bond ] [ simple ]
 Identify a complete match of the source molecule represented by a  
 smiles string in another smiles string or an array of smiles strings representing 
a database of chemicals. Make sure that you unselect hydrogens in your smiles string.
 Options:
  
| atom | allow superpositions of all atom types |  | bond | allow superpositions of all bond types |  | reverse | searches |  The following setup is optional:
  
Only up to mnSolutions hits will be retained in the final table of hits.   
Change this shell variable if necessary. 
The function will return the results in the following variables: prepare the target strings with the Smiles( a_//![hdt]* ) function  (exclude hydrogen, deuterium and tritium) 
 search the source string made without hydrogens  
  
i_out - contains the number of hits  
I_out - contains the integer array of the hit numbers 
 
WARNING: This is obsolete way of chemical substructure searching. 
Use: find table Index chemical  other chemical functions 
 
 find molecule reverse ms_1 s_smile 
 
WARNING: This is obsolete way of chemical substructure searching. 
Use find chemical instead.
 : find sstructure  [minimize]
 
find maximal common substructure in the input set of chemicals.
With the minimize option the command will try to aggregate multiple R-groups into single one (suitable for matched pair analysis)
 
: find molecule sstructure [ all ] [ tether ] [ hydrogen ]   
find maximal common substructure in selected atoms of the two molecules.
Without the all option, one largest pair of matching fragments is identified.
The pairs of equivalent atoms separated by a vertical bar will be stored in S_out, e.g.
 
a_C2H6.m/1/c1|a_C2H6O.m/1/c1
a_C2H6.m/1/c2|a_C2H6O.m/1/c2
 
Options:
 
all    : finds multiple matching fragments. Takes fragments with number of atoms >= minMCSFragmentSize  (3 by default )
tether : tethers the matching as_molIcmObj2 atoms the equivalent atoms of as_molObj1 . works only for the ICM_type objects (see convert and convertObject )
hydrogen :  adds hydrogen into a mapping. ( May slow down the procedure )
 
The tether option is useful since once the tethers are established, you can
 superimpose a_//T according to these tethers, or optimize the molecule with tethers, e.g.
 
build smiles "C(=CC=C(C1)CN(CCNC2)C2)C=1"
build smiles "C(=CC=C(C1)N(CCNC2)C2)C=1"
ds a_*.
find molecule sstructure all tether a_1. a_2.
superimpose a_      # uses tethers to superimpose a_ on a_1.
The tethers can also be interactively edited (see delete tether command) 
 find molecule [ tether ] as_subFragmentQuery as_IcmTargetContainingQueryFragment 
 You can also use the alternative set of arguments and use molecular selections instead 
of the smiles strings.  The atom pairs of as_IcmTargetContainingQueryFragment  
aligned to each sequential atom of the query molecule 
will be stored in the S_out array. The atom selection of the target will 
also be returned in the as_out selection.
 The tether option for ICM objects: After the equivalent sets of atoms in two molecules are identified, 
tethers can imposed pulling atoms of as_IcmMolContainingQueryFragment  
to the equivalent atoms of passive atoms as_subFragmentQuery . 
  The matching atoms of the second selection as_IcmMolContainingQueryFragment 
which are pulled by tethers to the as_subFragmentQuery template positions 
can be superimposed with the minimize "tz" v_positionalVariables command.
 Important: unselect the hydrogens to speed up the matching procedure, e.g.
 
  find molecule a_1.//!h* a_2.//!h*
 
An example: 
 
  
 build string name="a" "se nter his cooh"   # query template 
 build string name="b" "se nter his trp cooh" # target 
 find molecule a_a./his/cg,nd1,ce1,ne2,cd2,cb,ca,n a_b. tether 
 display as_out xstick # the tethered atoms of the target 
 display a_*. 
 minimize "tz" a_b.//?vt* 
 show Rmsd( a_b.//* )  # will show the RMSD of the equivalent atoms 
 See also:
 
 
 
 | find chemical: finds SMARTS pattern in 3D | 
 
 
 find chemical ms_sel s_smarts [all]
 
Searches using smarts pattern s_smarts in ms_sel. The result (matched atoms) will be stored in as_out
With all option it'll find all possible matchings. 
 
Example:
 
 build smiles "CC1=NN=C(NS(C(C=CC(N)=C2)=C2)(=O)=O)S1" name="sulfamethizole"
 display wire
 find chemical a_ "a" all  # finds all aromatic atoms
 display xstick as_out
 find chemical a_ "[$(N~[a;r6])]" all  # finds nitrogen bonded to 6-member aromatic ring
 display cpk as_out
 
See also: 
 
 
 | find pdb: fragment search | 
 find pdb rs_fragment os_objectWhereToSearch s_3D_align_mask [ s_sequencePattern [ s_SecStructPattern ] ] [ r_RMSD_tolerance]
 Find a fragment (e.g. a loop) with certain geometry, sequence and/or secondary structure (see also build loop [ stack ]) . 
Arguments:
  
Hits will be stored in 
 s_out . 
The following just illustrate the syntax, it does not make much sense,  
since you need to loop through a database of objects to find something 
interesting.rs_fragment: the search fragment template 
 
os_objectWhereToSearch: the other object. 
 
s_3D_align_mask: marks the residues to be used in the 3D 
superposition and comparison in terms of r_RMSD_tolerance (see below).  
The number of  'x's (or 'ON' bits) in the mask must be equal to the  
query fragment length (it may be discontinuous), while the total mask length  
should be equal to the found fragment length. For example, if you search for 
an 11-residue loop with the same geometry of 3-residue ends, but any geometry 
of the middle part your mask must be  "xxx-----xxx".  If you want to match 
geometry of the middle part you would invert the mask:  "---xxxxx---", etc. 
 
s_sequencePattern: Use  "*" for any sequence. Otherwise you may use 
regular expressions, for example:  "?A[!P]???$". 
 
s_SecStructPattern: 
Use  "*" for any secondary structure pattern. Otherwise, specify a regular 
expression, for example "?HHH___EE[!_]". 
 
r_RMSD_tolerance: RMSD threshold to accept a fragment as a solution. 
To avoid time-consuming  
 optimal 3D superposition 
during the search, distance Rmsd (i.e. root-mean-square deviation between 
two Ca-atom distance matrices of the compared fragments) is used as a measure of 
spatial similarity on the preliminary stage of each comparison. However, in the 
resulting list of hits, collected in SearchSummary 
 string array 
the optimal 3D superposition coordinate 
 Rmsd 
is presented.  
Therefore, RMSDs in the output list may exceed the specified threshold. 
 Example:
  
 read pdb "1crn" 
 read object s_icmhome +  "complex"         # object in which to search 
 find pdb a_1./16:18,20:22 a_2. "xxx----xxx" "V[LIVM]?????G??" "*" 2.5
 print s_out
 
 
 find prosite [ append ] seq [ r_minScore] [ i_mnHits]
 find matching prosite patterns, store results in the SITES table .  
Option append indicates that the results should be appended to the existing SITES table. 
The default r_minScore is 0.7 .   
The default i_mnHits is defined by the mnSolutions parameter.
 Examples:
  
 read sequence "zincFing.seq" 
 find prosite 1znf_m            
 show SITES 
 
 
 find pattern [ number ] [ mute ] s_sequencePattern [ i_mnHits] [ { os_objectWhereToSearch | seq_Name | s_seqNamePattern } ...   ]
 find specified sequence pattern (i.e. "[AG]????GK[ST]" for ATP/GTP-binding 
site motif A) in ICM shell sequences or molecular objects. Hits will be stored in 
 s_out . 
 r_out contains the number of found hits divided by the expected 
number of hits, as suggested by random distribution of amino-acids with frequencies 
from the Swissprot database. This "found/expected ratio" is also reported if  l_info=yes.  
If this number is 1. it does not mean anything, 10. means that you can publish the 
finding and two paragraphs of speculations, 10000. means that somebody else has already  
found this hit. Pattern language:
  
 ^ sequence beginning 
 $ sequence ending 
 ? one character 
 * any number of any characters 
 [ACD] alternatives 
 [!ACD] all but the specified residues 
 char \{ i_min, i_max \} : repetition. E.g. ?\{5,8\}  from 5 to 8 of any character. 
 Other arguments and options:
  
number - just report the number of hits instead of reporting each match 
mute   - suppress terminal output (used in scripts) 
i_mnHits - (default mnSolutions )   
os_objectWhereToSearch - the target molecular object.  
seq_Name - the target sequence. By default, the search is performed among all currently loaded sequences.  
seqNamePattern - the target sequence name pattern to search through many sequences loaded to the shell.  
 Returned values
  
s_out  - text output of all matches 
i_out  - the number of hits 
r_out  - the ratio to the random expectation (it r_out>1. it means that  
the number of hits is larger than the random expectation).  
 See also the 
 searchPatternPdb macro.
 Examples:
  
 read sequence s_pdbDir + "/derived_data/pdb_seqres.txt"  # all pdb-sequences  
 find pattern "[AG]????GK[ST]"   # search for ATP/GTP-binding sites  
 searchPatternPdb "^[LIVAFM]?\{115,128\}[!P]A$"    
     # ^ : seq.start; ?\{115,128\} from 115 to 128 of any res.; $ : seq.end  
See also: 
 read prosite, s_prositeDat .
 
 
 | find molcart : chemical search in Molcart database | 
 
 
 find molcart [sstructure|similarity|exact] table=s_molcartTable [ s_smarts|S_smarts|chemarray ] [r_distCutOff] [only] [stereo] [tautomer] [name=s_resultName] [query=s_SQL_condition] [output=s_molcartTable] [number=i_maxHits] [exclude=s_smarts|S_smarts] [append|delete] [ connection_options ]
 
Performes chemical search in Molcart database.
Connection may be specified by  connection_options 
 
Supported search modes are:
 
exact : exact match
sstructure : substructure
similarity r_dist : find similar compounds with distance cutoff r_threshold (between 0 and 1, e.g. 0.1 for very similar compounds)
 
Other options:
 
Examples :
 
  find molcart sstructure table="pub.all" "c1ccccc1" number=1000 name="myHits"  # by substructure
# find by substructure (contains 4 benzene rings)
  find molcart sstructure table="pub.all" "c1ccccc1" query="MolNofRings(t.mol)=4" name="tt"
  find molcart exact table="pub.all" t.mol  # finds exact matches. chemical array pattern
  find molcart similarity 0.2 table="pub.all" "CC1=CN(C(NC1=O)=O)[C@H]1C[C@@H]([C@H](CO)O1)O" 
 
See also: Index chemical Nof Find find table
 
 | find table : chemical search in ICM table | 
 
 
 find table {T_table|filename=<s_file} {sstructure [group]|similarity|exact} [ s_smarts|S_smarts|chemarray ] [r_distCutOff] [only] [stereo] [tautomer] [query=s_ICM_condition] [name=s_resultName|select] [index=I_index]] [append]
 
Performs chemical and text search in the local table. nProc =  is supported. 
"optimizer": collection with optimizer parameters
Arguments:
 
T_table : input table. 
Alternatively an SDF or CSV s_file may be specified.
s_smarts or S_smarts chemarray : input pattern
search type: sstructure similarity exactr_distCutOff distance cutoff for similarity search
With stereo option chirality will be taken into account in substructure and similarity searches.
With tautomer option different tautomer forms will be tried in the search.
group option toggles the special search mode when all atoms in the pattern except attachment points are treated "as drawn" (not other attachments are allowed)
With only option only number of hits will be returned.
With select option matched rows in the original table will be selected (not result table will be created)
name=s_resultName result table name (ignored with select option)
query=s_ICM_condition extra condition. 
  Using this argument you can specify an extra logical condition for the query. Column names, string constants and numnbers can be used:
  For example : MolWeight<400
With append option, search results are appended to the result table
 
Examples :
 
  group table t Chemical({ "CC(=O)Oc1ccccc1C(O)=O", "CC(Nc1ccc(cc1)O)=O" } ) "mol"
  add column t Mass(t.mol) name="MW"
  find table t query = "MW<160" select  # select rows with molecular weight < 160
  
  cc = Chemical({"CC(=O)Oc1ccccc1C(O)=O","CCCc1c2c(C(NC(c3cc(ccc3OCC)S(N)(=O)=O)=N2)=O)n(C)n1"}) 
  group table t2 cc "mol"
  # compare chemical tables
  find table exact t  t2.mol select   # select rows in t 
  find table exact t2 t.mol  select   # select rows in t2
  find table similarity t  t2.mol select 0.5   
  find table similarity t2 t.mol  select 0.5  
  # Not enough? Let's increase distance cutoff
  find table similarity t  t2.mol select 0.8   
  find table similarity t2 t.mol  select 0.8  
  # this command can also be used to select arbitrary rows in a table
  find table t2 select index = {1 3 5}
  Index( t2 selection )
  
See also: Index chemical Find find molcart  SMILES/SMARTS   other chemical functions 
 
 
 | find pharmacophore : pharmacophore search in ICM table | 
 
 
 find pharmacophore as_pharmQuery chemarray3D [all]
 
Performs a pharmacophore search in chemarray3D using as_pharmQuery. 
Example:
 
read binary s_icmhome + "example_ph4.icb"
find pharmacophore  a_pharma. t_3D.mol
 
all option allows one to score all possible mapping for each conformation
 
 
See also: Rmsd superimpose makePharma
 
 fix  vs
 fix (exclude from the free variable list) specified variables 
(such as bond lengths, angles and phases or torsions) in an ICM-object. 
This operation can be applied to the 
 current object 
only (use 
 set object os_objectfirst). See also: unfix .
 Examples:
  
 set v_//omg 180.                # set all omega torsions to the ideal value  
 fix v_//omg                     # fix all omega torsions  
 
 fix v_/8:16,32:40/phi,PSI,omg*  # fix the backbone in two fragments 
Note using 
 PSI 
torsion reference for correct residue attribution. 
 
 for
 is one of the ICM flow control statements, used to start a loop in the ICM-shell. 
See also while, endfor .
 
 
 a powerful tool for parallelization of ICM-shell scripts.
 fork [ i_nExtraProcesses ] [ pipe ]
 spawns one or the specified number of extra copies of ICM. This command will only 
work in a non interactive mode, i.e. you should run icm like this:
  
 icm _multiProc  # from the unix shell or 
 unix icm _multiProc  # from the interactive ICM-shell 
The Index( fork ) will contain the current process number, and Index( fork system ) returns process id. 
The parent process has both values at zero. the pipe option will redirect the output to the parent process and synchronously print it in the wait command
 
The simplest parallel script. Note that l_out==yes (or Index(fork)==0 ) defines if the script runs in the parent process.
 
#!icm64 -s
fork 4 
print l_out, Index(fork), Index(fork,all), Index(fork,system) 
wait
print " back to parent"
quit
#
 
An example script _multiProc with a hypothetical macro bigDatabaseJob which takes two arguments: 
the number of database chunks, the current chunk number, and the output file name: 
  
 read libraries 
 macro bigDatabaseJob i_nChunks i_Chunk s_outFile  # definition 
  ... 
 endmacro 
 
 read sequence "hot" 
 fork 4   
            # spawn 4 extra processes, total 5 
 ip = Index( fork )
 bigDatabaseJob 5  ip  "out"+ip  
            # work on section ip, 
            # save results to files out1 out2 .. 
 wait       # also quits all extra processes 
 unix cat out1 out2 out3 out4 out5 >! out.tab 
 read table "out.tab" 
 .... 
 quit 
fork option in for loop 
If you have a for loop which performs independent operations on each step you can simple add 'fork ' option to run it 
in parallel.
Example:
 
 
s_PDB = {"1crn", "1atp", "1xbb", "1unl", "3gvu", "2ins"}
read library
for i=1,Nof(s_PDB) fork 4   # run in 4 cores
  print s_PDB[i]
  read pdb s_PDB[i]
  convert a_
  write object a_ s_PDB[i] delete
  delete a_
endfor
You can also declare a 'shared' table to pass the data from child process to the parent.  Please note that the shared variable can only be of the table type.
 
For example you have an input table and you want to perform some heavy calculation for each row and put results back into the table:
 
Example:
 
add column t Count(10), Rarray(10)
for i=1,Nof(t) fork 4 t   # run in 4 cores, declare 't' as shared table
  # some long running code which calculates r_out
  t.B[i] = r_out
endfor
show t  # all values from child process should be here
 
Sometime, if the child process can produce more than one (or zero) rows, you can create an empty table in the beginning of
your for loop and append rows during the execution.
For that more you need to add append option.
 
Example:
 
 
group table t2 Iarray()  # empty table for the result
for i=1,10 fork 4 t2 append  # run in 4 core, declare 't' as shared table in 'append' mode
  # each child produces from 1 to 5 rows
  for j=1,Random(5 )
    add t2
    t2.A[Nof(t2)] = j
  endfor
endfor
show t2
Parallel processing with aggregation through the internal pipe and without file output 
See also:
 
Index( fork [system,all] )  - current process index, pid, and current number of children
Nof( fork )   - the number of available cores in the current computer
wait. 
 
 
 
 fprintf [ append ]  s_file  s_formatString arg1 arg1 arg2 arg3 ...
 formatted print to a file. The specifications for s_formatString are described in   
the printf command section.  
In contrast to the print and printf commands, the result of the fprintf command is not shown.  
E.g.
  
 fprintf        "a.txt" "%s\n"      "Day Temparature" 
 fprintf append "a.txt" "%s %.2f\n" "Monday", 22.4  
 fprintf append "a.txt" "%s %.2f\n" "Tuesday", 27.334  
 
 
 
 
- a group of ICM commands with a name and arguments returning a shell data object.
Definition: function name ( arg1 arg2 )
   code
   code
   var = ..
   return var
 endfunction
 
Examples:
 
function Fibo( i )
  a=0; b=1; I={1}
  while b<i
    I = I //b
    x=a; a=b; b=x+b 
  endwhile
  return I
endfunction
ii = Fibo(1000)
show ii
Example where the function returns a collection 
function ArrayStats( R )
  c = Collection()
  if(Nof(R)<2) return c
  c["mean"] =Mean(R)
  c["sigma"]=Rmsd(R)
  c["A"]    = 1./(c["S"]+1.e-18)  # protection against div by zero 
  c["B"]    = -c["M"]
  n=Nof(R); sort R
  c["median"] = (Mod(n,2)==0)?((R[n/2]+R[(n+2)/2])/2.):R[(n+1)/2]
  return c
endfunction
ArrayStats({1. 2. 3. 4.})["median"]
c = ArrayStats({1. 2. 3. 4.})
see also macro.
 
 global any_ICM_command
 guarantees that the new ICM shell variables created or read to the shell  
are at the main shell level, rather than nested inside macros.
 By adding global to any read command in a macro you make 
the keep variableName_or_type command at the end of the macro unnecessary. 
  
Example:
  
macro read_alignment s_file 
  global read alignment s_file 
endmacro 
 
 goto
 is one of the ICM flow control statements, used to jump 
over a block of ICM-shell statements.  
See also break , continue .
 
 
 
 [ group sequence | Group sequence unique | group table | Group column ] group sequence [fast] [ seq1 seq2 ... |  s_seqNamePattern | alignment | selection ] GroupName [pdb] [ unique { i_MinNofMutations |  r_MinDistance } [ delete ] ]
 group sequences into a  sequence group to perform a multiple alignment  
with the  align command.
 Option unique allows you to select only the different sequences. 
If no argument follows the word unique, only identical sequences 
will be dismissed, otherwise they will be compared and retained if the 
number of differences is greater than i_MinNofMutations (integer argument)  
or the  distance between two sequences is greater than r_MinDistance (real argument).
 
Option pdb activates preferences for higher resolution and first chain names ('a' is better than 'b', etc.)
 
Option fast will activate the dictionary approach and will give a big time benefit for very large collections (tens of thousand or more).
 
The comparison criterion is complex and has the following set of preferences which 
may be useful in extracting a  representative subset of sequences 
from a PDB-database:  
  
Suboption delete tells the program to delete from ICM-shell all the 
sequences which were found redundant by the unique option.longer sequence is better that shorter 
 
with the pdb option, or if all the names contain the X-ray resolution 2 digit suffixes (like a19 and 9lyz24, for 
resolutions 1.9 and 2.4 respectively), higher resolution is better (1.9 is better than 2.4). 
 
 Note Resolution suffixes are added by the read pdb sequence resolution command 
higher number in a pdb-file name is preferable, i.e. 9lyz is better than 3lyz.  
(I would not die for this principle, though). 
with the pdb option, identical chains have alphabetical preferences (e.g. 9lyz_a is better than 9lyz_b). 
 Examples:
  
 read sequences s_icmhome+"seqs.seq" # load sequences   
 group sequence aaa                  # group ALL the sequences into aaa 
 group sequence seq3 seq1 seq2 aaa   # explicit version of the previous line  
 align aaa                           # multiple alignment  
 
 read sequences s_icmhome+"azurins.msf" # some of sequences are very close  
                                     # but not identical   
 group sequence myAzur unique fast 0.15   # 0.15 is a Dayhoff-corrected minimum  
                                     # intersequence distance threshold  
 group sequence myAzur unique 26     # all sequence pairs differ in  
                                     # more than 26 positions  
 group sequence myAzur unique delete # duplicates will be removed 
 | group sequence unique: clustering, redundancy removal and assembly | 
 group sequence unique= "nt,junk,overlap[ > nRes ]" [ i_wordLen=6 [ i_dictDepth=10 [ i_nofMutations=0 ]]] [ delete ] [ nosort ] [ seq1 seq2 ... | s_seqNamePattern | alignment ] GroupName
 If you read a very large redundant set of sequences  
and sequence fragments some of which may (i) overlap or (ii) be included in another 
sequence, you may want to remove all the redundant fragments, and merge the overlapping sequences 
into a smaller number of longer sequences. 
In a simple case, if the number of sequences is not too large (less than a few hundred), 
this removal of redundancies and fragments in your sequence set, 
can be performed with the group sequence unique .. command described in the previous section.
 To work on much larger sequences sets and allows one to merge overlapping sequences a more advanced 
algorithm is needed. 
This ultra-fast removal of redundant protein or DNA sequences, may also assemble the sequences  
into larger consensus sequences and is invoked by group sequence unique= "options" command.
 The command returns the result as a  sequence group  GroupName.  
Will work on tens of thousands of sequences at once. 
The important features of the command:
  
it can cluster/unique millions of sequences very quickly  (your computer just needs enough memory). 
larger sequences incorporate the matching smaller ones.  
merged or absorbed sequence names are added to the description of their master  
unless nosort is specified 
merging (option "overlap") protein sequences requires sticky C-terminus letter 'X' 
the algorithm is based on a dictionary approach and allows one to have mismatches  
the process depends on the sequence order and may need 3 or more applications to converge since new 'merged' sequence may be formed. Just rerun the same command 3 times.
 matching rules: 
   
   for proteins:  any letter matches 'X',  B=(D or N) and Z=(E or Q) 
   for nucleic acids: any letter matches 'N'  
   if possible, 'X','N','B','Z' are replaced by a more specific letter  
from the matched sequence 
   Options (they can be combined in a comma-separated string, e.g.  "nt,simple,junk"):
  
delete - the non-unique sequences are deleted not only from the group but also from the shell 
nosort - do not merge descriptions of the merged sequences 
unique= "simple" - the fastest mode. It will eliminate only the exact duplicates.  
unique= "nt" 
means that DNA or RNA sequences are compared (the program assumes protein 
sequences by default and a corresponding i_wordLen of six).  
This implies the alphabet of A,C,G,T (or U) and the word length should therefore be increased. The default  
nucleic acid sequence word length of 13 allows one to fit the entire dictionary 
into the memory of 256 Mbyte. If your computer has less memory, reduce the 
 i_wordLen to a smaller value. 
 
unique="junk" 
this option tells the program to remove sequences that do not contain  
any meaningful sequence. This means that they are mostly composed of 
'X's or 'N's and the intermittent sequence is shorter than i_wordLen. 
This option is almost always useful. 
 
unique="stripX" 
this option tells the program to strip X (or N for nucleotide) character stretches 
from the beginning and from the end of the sequence. Those will be compressed into just  
one character. Useful if your sequences were dusted or repeat-masked. 
 
unique="noX" 
this option tells the program to skip the sequence quality enhancements (replacement 
of 'X','N','B','Z' by a more specific letter from the other very similar sequence). 
 
unique="complement" with this option the complementary nucleic acid sequences  
will also be considered and removed if redundant. This option can not be 
combined with the "overlap" option. 
 
unique="overlap[>numberOfRes]" 
Merge overlapping fragments in  
in addition of deleting the subfragments from the set. 
The number of overlaping nucleotides or amino acids can be 
redefined, e.g.  
unique ="overlap>25"   
  
Two amino acid sequences are merged only if there is the overlap  
is greater than the threshold (12 amino acids by default) 
and the overlapping C-terminal residue is 'X'.  
 
  An example of the allowed merge for protein sequences: 
 
s1     VTIKIGGQLKEALLDXGADDTVLEEMSLPGX------- 
s2     ----------EALLDTGADDTVLZEMSLPGRWKPKMIG 
result VTIKIGGQLKEALLDTGADDTVLEEMSLPGRWKPKMIG 
If for some reason your ESTs do not terminate with 'X's, they  
can be added by the following procedure:  
 for i=1,Nof(sequence ) 
   sequence[i] = sequence[i] //Sequence("X") 
 endfor 
 
 Two nucleic acid sequences are merged if the overlap is 30 by default.   
There are NO special requirements for an 'X' nucleotide flanking the sequences. 
  i_wordLen (6 by default, 14 if the  unique="nt" option 
is specified). The length of a word in the dictionary. The memory 
occupied by the dictionary depends exponentially on his length.  
 
 i_dictDepth (10 by default) limits the number of sequence fragments referenced  
referenced from a single 'word'. This option prevents the dictionary from growing to much 
in memory (what the product of i_wordLen * i_dictDepth ) .   
 i_nofMutations (zero by default) the maximal number of mutations/mismatches 
between sequences which are considered to be redundant. 
 See also:
 
  
Trans( seq_ frame ) - to translate a DNA sequence 
 align new # to align a cluster and generate the consensus 
 Find( sequence , s_keyword ) # to find a retired sequence  
with the s_keyword in its title among the newly formed sequences 
show [color] ali_ 
 
 
 group table [ copy ] [ u_name ] [array [s_name]  .. ] header [sh_obj s_name .. ]
 
WARNING: The append option of this function is obsolete. Use add column instead.
 
create a new table from individual arrays or append new columns or table header elements to an existing table. 
This example shows how an ICM table including both header elements and columns may look like: 
  
group table t {1 2} "a" {"one","two"} "b" header "trash" "comment" 2001 "year" 
 Info> table  t  (2 headers, 2 arrays) has been created 
  Headers: t.comment t.year 
  Arrays : t.a t.b 
 
show t 
 #>s t.comment                   # TWO HEADER ELEMENTS 
 trash 
 #>i t.year 
  2001 
 #>T t 
 #>-a-----------b----------      # TABLE ITSELF 
    1           one 
    2           two 
show t.comment t.year 
 trash 
   2001 
Options:
  
In the header section each ICM-shell object should be followed by a string specifying 
the variable name. The empty string will be interpreted as an indication to keep  
the name of the variable. Unnamed constants such as {1 2 3} or "adsfasdf" will be 
automatically assigned unique names.copy:  make a copy of the original ICM-shell object and move it to the table. 
append: add specified ICM-shell objects to the table (default: overwrite) # not recommended. 
 
See also: split, Table , add column (to append columns ) . 
 More examples:
  
 a=1   # integer a  
 b=2.  # real b  
 group table copy t header a "ii" b "rr"   
       # create table t with t.ii and t.rr header objects 
 show t 
 group table t header a "" b ""    
       # t with t.a and t.b header objects 
 show t 
 group table t {1 2 3} {2. 3. 4.}  
       # t with automatically named table 
       # arrays t.1 and t.2 
 show t 
 group table t {1 2 3} "a" {2. 3. 4.} "b"  
       # t with table arrays t.a and t.b 
 show t 
 split t # split the table into individual arrays 
See also: group by column , split aggregated cells in a column by a separator.
 
 
 | group table by column with non-unique values | 
 group t.keyColumnToGroupBy  [ {t.extraColumn|--all} [ s_colRule[,colname] ] ] ... [ separator=s_sepString ]
 groups a table by unique values of the key column t.keyColumnToGroupBy . 
Then applies the specified extra column value combination rules (or functions).
 The following column cell merging rules can be applied to the numerical arrays: 
  "uniq"|"mean"|"min"|"max"|"first"|"last"|"rmsd"|"sum"
 The string arrays can be grouped with the following subset of the above functions:
 "uniq"|"min"|"max"|"first"|"last" ,
 
  For any array type you can apply "concat" operation which will add values into array for each row in the result table 
 
  For chemical column "concat_conf" operation can be applied. The result chemical for each group will contain stack of conformation aggregated for that group.
 
The "uniq" function is the default,  
To take values from previously selected "min" or "max" values, use "refmin" or "refmax". 
and it means that the unique column values with the same key field will be accumulated 
by the group command.  
 
  
| Function | Description | Array Type | 
|---|
 | uniq | merge unique field values into v1,v2,v3 | I,R,S |  | first | keep the first value in the grouped table | I,R,S |  | last | keep the last value in the grouped table | I,R,S |  | mean | find the mean value with the same key | I,R |  | min | find the minimal value with the same key | I,R,S |  | max | find the maximal value with the same key | I,R,S |  | rmsd | find the root-mean-square deviation of values with the same key | I,R |  | sum | find the sum of values with the same key | I,R |  | refmin | find values from rows selected previously with min |  |  | refmax | find values from rows selected previously with max |  |  | concat | merge all values into array | any array type |  | concat_conf | merge conformations into chemical with stack | X |  Example:
  
group table t {1 2 1 1 2} {1. 2. 3. 4. 5.} 
t 
 #>T t 
 #>-A-----------B---------- 
    1           1. 
    2           2. 
    1           3. 
    1           4. 
    2           5. 
 
group t.A    # groups in place
t 
 #>T t 
 #>-A-----------B---------- 
    1           1.,3.,4. 
    2           2.,5. 
split t.B separator=","   # opposite operation in place, converts to rarray automatically
 
group table t {1 2 1 1 2} {1. 2. 3. 4. 5.} 
group t.A t.B "sum,C"  # sum t.B values and call the column C 
#>T t 
#>-A-----------C---------- 
   1           8. 
   2           7. 
There are two special rules "refmin" and "refmax" which can be applied in conjunction with
 "min" and "max" and take rows corresponding to minimum or maximum values in the group.
 
Note that specifying all option instead of column name will apply operation for all the rest of columns.
 
Examples:
 
group table t {1 1 2 2} {2 1 3 4} {"a" "b" "c" "d"} {"a" "b" "c" "d"}
group t.A t.B "min,B"  all "refmin,C"  name="t1"
group t.A t.B "max,B"  all "refmax,C"  name="t2"
See also:  split aggregated cells in a column by a separator.
 | GUI and Programming Dialogs in ICM | 
 gui [ simple ]
 
   start menu-driven graphical user interface from command line. 
The GUI runs the icm.gui file containing all the commands 
invoked by menus or pop-ups.
 Option simple allows you to keep your terminal window separate from the graphics window.
  
% icmgl 
 gui simple 
 You can also invoke gui from the command line, e.g.
  
icm -g # or  
icm -g mymenus.gui 
icm -G mymenus.gui  # keep the original terminal window 
 Terminal window and fonts
 icm -g  (or gui command) invokes a GUI frame with its own built-in terminal window . 
To influence the font size in this terminal window, modify XTermFont record of 
the icm.cfg configuration file, e.g.
  
XTermFont *-fixed-medium-*-*-*-24-* 
 If you prefer to keep the original terminal window use the icm -G option 
or invoke the gui simple command from ICM shell (I keep alias guis gui simple  
in my personal configuration file). In this case you can change the font of the terminal 
window with standard means of the window manager.
 3D Graphics window
 GUI has a GL-graphics window which can be undisplayed with the
  
 undisplay window  
command or from GUI by choosing Clear/No_graphics menu item. 
See also: gui programming
 
 
 [ Help browser | help | help commands | help functions ]get help from icm.htm file. Set s_helpEngine 
variable to "icm" (internal help in the text window), "netscape" or  
any other web-browser. Important, make sure that the s_webViewer variable 
points to your html-browser (e.g. s_webViewer = "firefox" ), see also
 File/Preferences/DisplayGeneral . 
 | Getting help in built-in ICM html browser. | 
 
 
 help command|function|icmVariable|s_icmHelpAncorName
 
 help "I:anchorName"
 
open the specified section in the ICM Language Reference Manual
 
 help "G:anchorName"
 
open the specified section in the ICM Program Guide
 
 help s_htmlFileName   
# the file name must be followed by the pound sign
 
opens a single html file in the built-in ICM html browser. This file may contain
sections of icm script in the following format:
 
<!--icmscript name="action1"
read pdb "1crn"
display a_*.
-->
...
<a name="action1" href="#action1">click here to execute icm script</a>
 
 
help read pdb  # opens the read-pdb section
help "G:learning"
help "I:montecarlo"
help "myfile.html#"
 
 help command|function|icmVariable|icmHelpAncorName
 
 help [ input= s_fileName ] [ word1 word2 ... ]
 get full help in either text or html form, redirect it to the specified file, if the input 
option is specified.  Do not use plural forms of the nouns. 
Examples:
  
 help Random 
 help read sequence 
The built-in help engine does not know about keywords.  
It is recommended to use the on-line version of the 
ICM manual which has a well-developed Index  
(download the newest version of the manual, man.tar.gz from the Molsoft ftp site). 
 help commands [ s_Pattern ]
 generates concise list of syntax lines for all or specified commands.
 
 help functions [ s_Pattern ]
 generates concise list of syntax lines for all or specified functions.
 Examples:
  
 help                     # type  /stereo, and then letter n or Bar 
 
 help help                # how to get help  
 
 help commands            # list syntax of all commands  
 
 help commands  "rea*"    # list syntax of all read commands  
 
 help functions           # list syntax of all functions  
 
 help functions Matrix    # list syntax of the Matrix family of functions  
 
 help                     # start the browser to use its own search means  
 help montecarlo          # just the command name  
 help real constant 
 
 help read pdb 
 
 help Split 
 
 
 history [ unique | full ] [ i_NumberOfLines]
 display previous commands.  Option unique squeezes out the  
repetitive commands. 
  Without the full option  the commands executed from the file
(rather than manually typed) will not be shown.  The unique option
hides the repetitions of the same command.
 
For example: 
  
 history 20              # show last 20 lines  
 history unique 
 To delete all previous history lines, use the delete session 
command. In this case the write session command  
will save only the new history lines.
 
 
 if
 is one of the ICM flow control statements, used to perform 
 conditional statements. 
See also: then, elseif, and endif .
 
 
 
 [ Info molcart ] 
 info auto write
 
Shows information about when autosaving was performed in the current session.
 
 | Database additional statistics | 
 
 
 info molcart [ connection_options ]
 
Prints additional information about the Molcart connection. Connection may be specified 
by  connection_options 
 
See also: molcart
 
 keep  ICM-shell-variable-name1 .. [global]
 retain specified ICM_shell variables or their classes (e.g. real, rarray 
etc.). This command is used in macros to avoid automatic deletion of 
all the local ICM-shell variables.
 Also note that four classes  
of standard ICM-shell variables, 
 reals,  
 integers,  
 logicals, and 
 preferences, are automatically restored to their initial 
values by default. You can use the keep command to retain their new values.
 
Examples:
  
 macro rdseq s_pdbName  # extract sequence from a pdb-file 
   read pdb sequence s_pdbName 
   rz = Resolution(s_pdbName,pdb) 
   mncalls = 10         # the existing standard shell variable 
   keep rz, sequence    # retain all the sequences and rz 
   keep mncalls         # retain its new value 
 endmacro   
 
Note that by default values will be kept only for the one level higher.
With global option changes are propagated through the all nested levels to the global
namespace.
 
Example :
 
s_a = "global"
s_b = "global"
macro m1
  m2
  print "m2: ", "s_a =", s_a, "s_b=" s_b
endmacro
macro m2
  s_a = "m2"
  s_b = "m2"
  keep s_a   # will be kept only for m1
  keep s_b global  # will be kept globally
endmacro
m1
print "global: ", "s_a =", s_a, "s_b=" s_b
 
 
 
 
 
 
 join [left|right] T1.co1 T2.col2 [ name= s_newTableName ] [ column=S_outputColumns ] [stereo off]
 
Unites some or all data of the two tables into another table. If the s_newTableName 
coincides with the one of the tables, the new table will replace it. The default output table
name is T_join .
 
The main two arguments are two columns T1.col1 and T2.col2 with matching values.  
You can use chemical structure column to join by exact structure match. stereo off option
can be added to ignore chirality.
 
The column= argument contains the list of column names to be retained in the output table.
 
Columns in the new output tables.The columns for the output table can be listed as the column=  
By default action is to include all columns from both tables. 
The columns by which the tables are joined will turn into one, therefore
the total number of columns by default will be N1+N2-1.
 
Column names of in the joined table.The column takes are preserved unless they collide (i.e. T1.B and T2.B 
are both present). The the latter case the first column retains its name while the
column from the second table will be named T2name.colName , (e.g. T_join.B , T_join.T2_B ).
 
Types of the join commandThere are three types of the join command:
 
inner join - the default mode, no keyword needs to be specified.
The inner join returns all rows from both tables where there is a match
in the order of the T1.col1 column. 
If there are rows in T1.col1 that do not have matches in T2.col2, those rows 
will not be included in the output column.  
 This table can easily be empty, if the values do not overlap.
 The number of rows of the output table is less or equal to the number of rows 
in the first table.
Example:
group table t1 {1 2 3} "A"  # 1 has no match in t2
group table t2 {"a" "b" "c"} "A" {2 3 4} "B"
show t1,t2
 #>T t1
 #>-A----------
    1
    2
    3
 #>T t2
 #>-A-----------B----------
    a           2
    b           3
    c           4
join t1.A t2.B name="t3"
t3
 #>-A-----------t2_A-------
    2           a
    3           b
leftThe left join returns all the rows from the first table, extended with the matching rows 
from the second table. 
For T1.col rows there with no matches in the second table, empty fields will be added.  
 The number and order of rows of the output table is equal to the number of rows in the first 
 table.
Example:
 group table t1 {1 2 3} "A"  # 1 has no match in t2
 group table t2 {"a" "b" "c"} "A" {2 3 4} "B"
 join left t1.A t2.B
 T_join
 #>T T_join
 #>-A-----------t2_A-------
    1           ""
    2           a
    3           b
rightthe right join returns all the rows from the second table, and appends fiels from the first table if a match is found. It is identical to the left join but with two arguments swapped
( join left t1.A t2.B is the same as join right t2.B t1.A  ).
Example:
 group table t1 {1 2 3} "A"  # 1 has no match in t2
 group table t2 {"a" "b" "c"} "A" {2 3 4} "B"
 join t1.A t2.B right name="ttt"
 ttt
 #>T ttt
 #>-A-----------B----------
    a           2
    b           3
    c           4
localthe  local join returns all the rows from the first table. Values in the matching (by name) columns will be overwritten with values
from the second table for matched rows.
Example:
add column t1 {1 2 3} {1 2 3}
add column t2 { 2 3} {4 5}
join t1.A t2.A local name="t1"
 
See also the add table ( command for appending a table with identical column structure ) add column or add column function ( adding new columns )
 
<>
 
 | learn from a training data set and create a predictive model | 
 
 [ Learn atom | Learn chemical ]learn t.Y | { Y t } | {Y t M} [all] [ options ] 
learns how to predict column t.Y from other columns or a matrix using the specified method; creates a modelobject.
 
Options:  
 
 type="plsRegression|randomForestRegression|nnKernelRegression|kernelRegression|bayesianClassifier|randomForest|kernelClassifier"
 
- the training method: partial least squares, principal component regression, kernel regression, nearest neighbor or random forest classifier/regression
 
 kernel="dot"|"polynomial [iOrder C0]"|"radial [exp]"|"tanimoto"|"sigmoid [K C]"
 
 name= s_outputModelName  
 
 column= S_columnNames 
 
- an array of column names 
 
 all   
 
- forces to use all numerical columns in addition to the chemical column
 
 print={LenMin LenMax nOfDescriptors iType [1:6]}  
- chemical fingerprint parameters
 
 test [= nCross|I_excludedTestRows]  # cross-validation group number or test rows
 
 center   # enforce the constant @@{w,,0} (see below) to be **zero .
 
 select= R_2_c_eps 
 
 select= I_LatentVectorSetForPls 
 
 unfix 
- range normalize the input
 
this command takes a real array Y and a matrix or table of descriptors 
and builds an optimal cross-validated predictive model for property Y.  
This command can build several different types of models:
 
Partial Least Square model (PLS-regression) in which  Yi = w0 + Sum( wi*Xij )
Principal Component Regression (PCR) which is a similar linear model as PLSR, but identified and 
build in a different way.
 
The output of this command is the following: 
  
a predictive model object ( one-element parray of subtype 'model'. See also Parray( model s_name ) )
a new Ypred column with self-predicted values is added to the training set table 
a new Yprex column with cross-validated values is added to the input table 
rmsError and correlation coefficient for Self- and Cross-validated (CV) predicted values (see the example) in R_out.
 Example:
  
read table "t.csv" 
learn t.A 
 learn t.A 
 Info> plsRegression model for property 'Apred' built for 95 records.  
 Corr_R2=0.44 (CV=0.36),  rmsError=0.48 (CV=0.51) 
 
learn t.pK test=4 select={2,10,20,30} type="pls" 
See also: 
  
learn atom
learn chemical
show parray  # to see the create model 
show modelName # to see the model details 
Parray( model s_name )  : create an empty model/collection for APF or docking or any other types of models.
 
 
 
 
Models to predict single atom properties. (e.g: pKa)
 
 learn atom chemarray { R_learnValues|RR_learnValues } print=I_fingerprintParams map=S_atomMappingParams [ exclude=r_correctionThreshold [ number=i_nofCorrectionIterations ] ]
 
 
 | Predicting compound properties, using PLS regression or Random Forest classifier/regression on static columns and dynamic chemical `fingerprints. | 
 
 
If you have a chemical table which is large enough, say more than a few hundred molecules,
you can build a model to predict a numerical property or binary category of each compound with 
Partial Least Squares method (PLS) or Random Forest classifier.
Use this command:
 
 learn propColumn name= ModelName type="plsRegression"|"randomforest"|"randomforestRegression" \
    test=n_CrossValidation_Interations  \
    print= { chainLenMin , chainLenMax , FPsize , binary_vs_count_flag  } \
   [ map= { atom_map_string, bond_map_string }  ]
    other_learn_options  
 
 
This command will take a chemical table and will develop a model. The model can then be applied to
another chemical table using the predict command or Predict function.
 
Learn Values 
  PLS regression: Accepts rarray or iarray as learn values.
  Random Forest regression: Accepts rarray or iarray as learn values.
  Random Forest classifier: Accepts iarray with two values 1 and -1 (binary classifier) or with any limited set of labels (multi-label classifier).
 
Descriptors. 
The print argument.  The print argument is an array of four integers:
 
chainLenMin  : the minimal length of the chain of atoms, enumerated in each compound, 
  usually it is 1 which means that
  you will consider an atomic composition numbers as descriptors. 
  The typing of atoms can be customized with the map argument.
chainLenMax : the maximal length of the chain atoms and bonds enumerated in each compound
  Usually it is 3 or 4. Larger values of this parameter will lead to a large number of possible
  combinations. To overcome that, either the typing needs to be simple (e.g. only 
  sp2 and sp3 property, regardless of the atom nubmer), or the data set needs to be really large.
FPsize : is the total number of bins in a final fingerprint. Value -1 means that this
  size is automatically evaluated. Typically the size (either explicit or automatically estimated) 
  is in a hundreds to throusands range.  We recommend that use -1 is used.
binary_vs_count_flag : 0 for descriptors counting 
 
map : Customizing the fingerprint to fit the predicted property 
chemical chains of each length can be projected or maped to fingerprints at a different
level of details. This argument has the following structure: 
 
{ "atom_properties_at_lenMin ;
...                  ;
atom_properties_at_lenMax " ,
"bond_properties_at_lenMin ;
...                  ;
bond_properties_at_lenMax " }
 
Each properties section is a comma-separated list of property names:
 
prop1, prop2, ..;
 
Example: 
 
map={"cd,h;cd,h;cd,h", ";bt;bt", ""} # three chain lengths for atoms, and bonds
Here is the list of possible atom properties.
 
 
Special simplified types for triangle type fingerprints.| number | description | code | comment | 
|---|
 | 9 | "atom number" | "cd" |  |  | 3 | "hybridization" | "sp" |  |  | 2 | "aromaticity" | "a" |  |  | 3 | "nHydrogens" | "h" |  |  | 3 | "nPolarHydrogens" | "hp" |  |  | 3 | "ring/chain" | "r" |  |  | 5 | "main valency" | "p" |  |  | 5 | "nHeavyNeighbors" | "b" |  |  | 3 | "chirality" | "c" |  |  | 7 | "sybyl type" | "s" |  |  | 6 | "min ring size" | "rs" |  |  | 4 | "formal charge" | "qfm" |  |  | 2 | "constant" | "any" |  |  | 5 | "number of Neighbors" | "x" |  |  
| number | description | code | comment | 
|---|
 | 2 | "Donor-Acceptor" | "hbda" |  |  | 2 | "Donor" | "hbd" |  |  | 2 | "Acceptor" | "hba" |  |  | 4 | "aromatic/SP2/aliphatic" | "aa" |  |  
 
Here is the list of possible bond properties.
 
| number | description | code | comment | 
|---|
 | 4 | "bond order" | "bt" |  |  | 2 | "ring/chain" | "r" |  |  | 2 | "rotatable" | "rt" |  |  | 2 | "const" | "any" |  |  
More Examples:
 
 read table mol "train_set.sdf"
 learn train_set.clogP name="clogPpred" type="plsRegression" \
    test=5 print={1,3,-1,0}  map={"cd,h;cd,h;cd,h", ";bt;bt", ""} 
Predict function or predict command can be used to apply the model.
 
Example:
 
Predict( Chemical("O(C(=O)C)C(C(C(O)=O)=CC1)=CC=1" ) clogPpred )
The information about weights assigned to fragments can be returned by Table function or by Info model function
 
Example:
 
show Info( clogPpred )
add column clogPpred_w  Info( clogPpred )["fpstat","chains"] name="name"
add column clogPpred_w  Info( clogPpred )["weights"] name="w"
# add column with descriptors for test compounds
add column clogPpred_w Descriptor( Chemical("O(C(=O)C)C(C(C(O)=O)=CC1)=CC=1" ), clogPpred)[1] name="aspirin_desc"
Now the final regression can broken down into regression weights, descriptors and regression constant term.
 
 
clogPpred_w.name: descriptor names (for fingerprint models - SMARTS like strings)
clogPpred_w.w   : weights
clogPpred_w.aspirin_desc  : descriptor values for the compound above
 
 
# the value below should correspond to the result of the Predict function for that compound
Sum( clogPpred_w.w * clogPpred_w.aspirin_desc ) + Info( clogPpred )["z"]
 
 
See also: Descriptor , fingerprints , Info model
 
 | Multiple Linear Regression | 
 
 
Multiple linear regression is a statistical method used in data analysis and predictive modeling to examine the relationship between a dependent variable and multiple independent variables. It is an extension of simple linear regression, which deals with the relationship between two variables (one dependent and one independent).
 
 calcMLR M_inputs R_outputs
 
Example: This example uses a chemical table called XDict and predicts MW using atom counts. Change the name to the name of your chemical spreadsheet. 
 
# add columns with some descriptors
add column Xdict function="MolWeight(mol,'monoiso')" name="MW"
add column Xdict Descriptor(Xdict.mol,number,atom) 
M = Matrix( Xdict  {"a_nH", "a_nC", "a_nN", "a_nO", "a_nF", "a_nS", "a_nP", "a_nCl", "a_nBr"} )   # need to make sure all columns have at least one non-zero value
calcMLR M Xdict.MW
W = R_out    # weights
#To apply weights back
 add column Xdict name="molW_pred"  M * Transpose( Matrix(W ) )[?,1]
Corr( Xdict.MW Xdict.molW_pred )
 
 | Building deep learning ANN models with ICM for Predicting compound properties | 
 
 
Artificial Neural Network (ANN) engine can be used to build regression or classifier models. (Special ICM-Pro or ICM-Chemist package is required)
 
 Building descriptor based ANN model
The simplest way to build an ANN model is to use chemical fingerprints or/and set of other numerical descriptors.
In this case building model is similar to the process described in general learn and learn chemical section.
 
In addition to providing training values and you need to specify the network structure.
 
 learn t.Y type="nnetreg"|"nnet" test=T_cross_valid_set network=C_ANN_structure print=C_FP_parameters number=i_max_training_epochs 
 
 
type: specifies model type
  
    "nnetreg" : ANN Regression. Used to predict real values (single or multiple per compound)
    "nnet"    : ANN Classifier. Used to predict discrete values (labels) (single or multiple per compound)
  test: external cross-validation set
number: maximum number of training epochs
print: collection with fingerprint specifications
  
    Example:
     print = Collection( 'ATMAP' 'cd,h', 'BOMAP' 'bt', 'TYPE' 'ecfp', 'SIZE' -1, 'BINARY' yes, 'ECFPITER',3  )   # ECFP4 fingerprint"ATMAP": atom properties (see learn chemical for details)
    "BOMAP": bond properties (see learn chemical for details)
    "TYPE": "ecfp" or "linear"
    "SIZE": size of the result fingerprint. (-1 for auto size detection)
    "BINARY": yes|no binary or counted 
    "MINLIN": minimal size of the fragment to include (default=1)
    "LEN"   : maximal size of the fragments to include (mostly used for 'linear' fingerprint type)
    "ECFPITER": number of ECFP iterations. 3 - corresponds to ECFP4, 4 - ECFP5, etc.
  network: collection with ANN structure.
   
      The final layer (loss function) will automatically be added based on training values type and structure:
       
        Real values (single or multiple per row): "LinearRegressionOutput" layer is added. Computes and optimizes for squared loss during backward propagation
        Integer values/labels (single label per row): "SoftmaxOutput" layer is added. Computes the gradient of cross entropy loss with respect to softmax output
        Integer values/labels (multiple labels per row): "LogisticRegressionOutput" layer is added. Applies a logistic function to the input.
       
        Example: 
       net["optimizer"] = Collection( "learning_rate", 0.005, "stochasticGrad", yes )"learning_rate": value that determines the step size at each iteration while moving toward a minimum of a loss function (<1)
       
 Example (model to predict LogP values)
net = Collection()   # empty collection to define network
layers = Array()     # array with network layers
# two layers 
layers[Nof(layers)+1] = Collection( "op" "fc" "num_hidden" 5, "act", "sigmoid" )
layers[Nof(layers)+1] = Collection( "op" "fc" )
net["layers"] = layers
net["optimizer"] = Collection( "learning_rate", 0.005 ) # optimizer parameters
# final learn command to build a model to predict 'logP' column for table t using counted ECFP4 as descriptors
learn number=50 test=t t.logP name="logPpred" type="nnetreg" network=net \
                print = Collection('ATMAP' 'cd,h', 'BOMAP' 'bt', 'TYPE' 'ecfp', 'SIZE' -1, 'BINARY' no, 'LEN' 100, 'MINLEN' 1 'ECFPITER',3 )
 Building convolutional ANN model
Convolutional ANN model takes individual atom properties and chemical graph topology as an input for a training process.
 
ICM provides number of special operators types to perform convolution operation directly on chemical graph. 
This method can be used to train on per-compound, per-atom and per-bond properties.
 
Two most important layers for chemical convolutional ANNs are:
 
Chemical convolution operator ("conv")
Pooling operator ("pool")
 
IMPORTANT: convolutional ANNs usually takes much longer time to train and tune.
 
 learn t.Y type="nnetreg"|"nnet" test=T_cross_valid_set network=C_ANN_structure chemical=s_atomProperties number=i_max_training_epochs 
 
The main difference in learn command to build convolutional ANN is to provide individual atom properties (**chemical= argument) instead 
of full chemical fingerprint or descriptors
 
Atom properties for convolutional ANN
 
| description | code | 
|---|
 | simple organic map | "cd" |  | Mendeleev map(6-bits) | "cdm" |  | nHydrogens | "h" |  | formal charge | "qfm" |  | nRings | "r" |  | hybridization | "sp" |  | HBD | "hbd" |  | HBA | "hba" |  | nHeavyNeighbors | "b" |  | ExtraColumns | "ex" |  | sp1 hyb | "sp1" |  | sp2 hyb | "sp2" |  | sp3 hyb | "sp3" |  | nNeighbors | "x" |  | MinRing3 | "r3" |  | MinRing4 | "r4" |  | MinRing5 | "r5" |  | MinRing6 | "r6" |  
 
 Example (model to predict LogP values using chemical convolutional network)
net = Collection()   # empty collection to define network
layers = Array()     # array with network layers
# two chemical convolutional layers with activation
layers[Nof(layers)+1] = Collection( "op" "conv", "type", "chem", "num_filter" 20, "act", "sigmoid")
layers[Nof(layers)+1] = Collection( "op" "conv", "type", "chem", "num_filter" 20, "act", "sigmoid")
# pooling summation layer  
layers[Nof(layers)+1] = Collection( "op" "pool", "type", "sum" )
# fully connected layer (set num_hidden to number of properties per-compound you're training on)
layers[Nof(layers)+1] = Collection( "op" "fc"  "num_hidden" 1 )  
net["optimizer"] = Collection( "learning_rate", 0.005 ) # optimizer parameters
# final learn command to build a model to predict 'logP' column for table t 
# using single atom properties and chemical graph
learn number=500 test=t t.logP name="logPpred" type="nnetreg" network=net chemical='cdm,h'
 
 
 Full list of supported layer/operator types
"fc" : Fully Connected Layer
  Attributes:
  
    "num_hidden": number of hidden neurons (default 1)
    "act": add activation operator ("none"|"relu"|"sigmoid"|"softrelu"|"softsign"|"tanh") default="none"
  "dropout" : Dropout layer
  Attributes:
  
    "p": fraction of connections to dropout (0-1)
  "conv" : Convolutional layer
  Attributes:
  
    "type": convolution type ("chem" - chemical graph convolution)
    "num_filter": number of 'filters' (term comes from image convolution)
    "neibAggr": type of neighbor aggregation ("sumOnly"|"sumPhase"|"maxFarBond"|"sumFar"|"sumFarBond")
  "pool" : Pooling layer
  Attributes:
  
    "type": pooling type ("sum"|"max"|"3Dpair")
   
See also:
 
 | Link the graphical object to one or several molecules, or an object move in 3D space together | 
 
 
 link g_grob1 [g_grob2 ..] ms_mols_in_one_obj | os_oneObject
 
The grob can be linked to a molecule, a set of molecules in one object, or to the whole object in order to permit synchronize rotation/translation of those grobs together the linked molecules. The molecules and objects can change coordinates in several operations, e.g. connecting and interactive 3D translations and rotation, or upon superposition of different objects. 
The connection mechanism is the following: the selected molecules get a fieldnamed "_GROBLINK_" with the names of the linked grobs. 
   For example, the icmPocketFinder macro links the predicted pocket grobs to molecules responsible for those pockets.
 
Example:
 
read pdb "1xbb" 
cool
make grob skin a_asti a_asti # grob g_1xbb_asti is created
make grob skin a_a a_a # grob g_1xbb_a is created
color g_1xbb_asti yellow
display grob
link g_1xbb_asti a_asti
Field( a_asti "_GROBLINK_" )
#  {g_1xbb_asti}
connect a_asti # move it and grob will move with it. Then press Esc to disconnect
#
link g_1xbb_a a_A
Field( a_A "_GROBLINK_" )
#  {g_1xbb_a}
 
 
 | Link or assign reaction group arrays to a Rx positions on a chemical scaffold. | 
 
 
 link group scaffold i_R_GroupNumber1 chem_array1 i_R_GroupNumber2 chem_array2 ..
 
associate corresponding Rn positions on a scaffold with the chemical arrays.
This operation copies the chem_array into the scaffold, therefore the external array
which was used to by this command will remain in place.
  After the link operation the external array can be deleted.
 
 link group scaffold i_R_GroupNumber delete 
 
 delete the association.
 
 link group scaffold i_R_GroupNumber table 
 extract the R-group associated with the given position from the scaffold 
into a stand-alone shell
chemical table. 
One can read an RG file with a scaffold and RGroups and a scaffold with linked, 
but hidden, arrays will be created. Then these arrays can be turned into external
chemical tables, edited and linked back to the scaffold.
 
 
write table mol scaffold "markush.mol" # creates an RG file
#
read table mol "markush.mol"
enumerate library scaffold.mol
 
 | link internal variables of molecular object | 
 link  vs_varChainToBeLinked
 
 link molecule vs_inSeveralIdenticalMolecules 
 impose a chain of equality constraints 
 (v[1] = v[2] = v[3] = ... = v[n]) 
on the specified variables 
(or, in other words, keep the specified variables equal to each other). 
If one of the variables is changed all the others will be changed. 
Energy derivatives are modified accordingly. 
This command is great for modeling periodic structures 
(e.g. (Pro-Glu)n).
 
  With option molecule , multiple chains of equivalent variables in several
molecules will be formed. Make sure that the variables are properly aligned
and torsion angles are not linked to phase angles. 
 
Examples:
  
# single chain
 build string "ala ala ala ala ala ala ala ala ala ala"  # 10 alanines  
 link v_//phi                   # all the phi angles should be equal  
 link v_//psi                   # all the psi angles should be equal  
 montecarlo v_/2/phi,PSI v_*    # sample just one residue 
# multiple chains for a dimer
delete a_*.
build string "leu ala ala leu ala ala ala leu"
copy a_ "b"
mv a_2. a_1.
ds a_
set v_1//tvt1 0.
set v_2//fvt1 180.
fix v_//tvt1,fvt1  # do not link those
link v_//* molecule
montecarlo v_1/* v_/*
Be careful with selections of psi variables in peptides since they 
are assigned in ICM to the first atom of the next residue. PSI  
specification goes around that attribution. 
Groups of linked variables can be deleted with the
 
delete link variable 
command. 
 
 | Link chains/molecules to sequences and alignments | 
 link ms  [ali1 .. [only] | alignment | sequence | seq1 seq2  ... seqN]
 link or associate protein molecules with separate sequences or sequences 
grouped in an alignment. If alignment ali_ is given, molecules 
are also linked to this alignment (note that the same sequence can be 
involved in several different alignments).  
Amino-acid sequences of amino- or nucleotide- chains in molecular selection
 ms_ will be compared with specified ICM-shell sequences 
and identical pairs will be linked. Make sure that you specify one 
molecule selection, use logical or (|) between the two selections if 
necessary. Linking molecules with alignments allows an automatic 
residue-residue assignment by the following commands and functions: 
 superimpose, set tether, Rmsd and Srmsd . 
Alignments can be prepared in advance either automatically by the 
 align command or Align 
function, and/or modified by manual editing of the alignment file.
 
Arguments and options 
ms_  : selection of chains to be linked, for example a_*. that means all molecules of all objects. If no other arugments is specified ICM will rely on the linked sequences to find the latest alignments containing those sequences.
only : the sequences linking is not changed but the link to the specified alignment(s)  is attempted
alignment : same as option ali .. only , but all alignments in the shell will be tried
sequence : ICM will try to link the specified chains ( ms_ ) to the sequences in the shell. Name matching will be attempted (e.g. a_1crn.a 1crn_a ) .
seq1 seq2 .. : try to link selected molecules with specified sequences. Note that the sequence should be idential, usually it means that the sequence was produced with make sequence ms_ .
 
Short forms of the command:
 
link a_*.            # try to find latest alignments for all the chains in the shell
link a_*. ali_target # find the matching sequences leading to the specified alingment, establish links
link a_*. sequence # search all sequences
 
Use the ribbonColorStyle="reliability" option and color ribbon 
to display the local strength of the alignment. 
The strength parameter will be 3D averaged with the selectSphereRadius  
radius. 
 The following illustrates the first step of homology modeling.
 Example:
  
 build "newseq"                # that is what you want to build by homology  
 read pdb "template.pdb"       # that is the known pdb-template  
 read alignment "seq3Dali.ali" # prepared/modified sequence alignment  
                               # of the two structures  
 set object a_1.               # this is the first molecule that we  
                               # are going to model  
 link a_*. seq3Dali            # establish links between sequences 
                               # and objects 
 set tether a_1,2.1 seq3Dali   # impose tethers according to the alignment  
 minimize tether               # fold it according to the template  
See also: 
 
 
 
 [ List font ]list [ alignment ] [ command ] [ factor ] [ function ] [ grob ] [ iarray ] [ integer ] [ logical ] [ macro ] [ map ] [ matrix ] [ object ] [ profile ] [ rarray ] [ sarray ] [ sequence ] [ string ] [ name1 name2 ... ] 
 list find pattern|word
 list ICM-shell objects matching the name pattern (all if name-pattern 
is omitted). The plural form can be used for more natural expressions. 
'list commands' actually means list all legal words known by ICM (ICM 
command words). Use flanking asterisks to search in any position. 
Option find or pattern automaticall transforms unquoted word into "*word*"
 Examples:
  
 list                          # list the "most wanted" object-types  
 list functions 
 list sequences                # if you have aliases, you can  
                               # type 'ls se' instead  
 list "*my*"                   # all ICM-shell variables containing "my"  
 list find my                  # the same as the previous search 
 list pattern my               # identical to the previous too 
 | list graphic font : listing existing fonts for 2D and 3D graphics labels | 
 
 
 list font graphic 
 
show currently active fonts used in 2D and 3D labels in the GL graphics window.
The output shows the font number, font size, bold-italic-underline and the number of
labels using this font.
The font number refers to the following fonts:
 
courier
times
arial
symbol
 
Example:
 
list graphic font 
 -#-F-sz-biu-rf
 1 2 24      1
 
 | list the content of the icm binary file | 
 list binary [ s_binaryFileName ]
 list the table of contents of the icm-binary multi-object file.  
The default name is -"icm.icb" and the default extension is ".icb" . 
To read the whole archive, use the read binary command. 
For a subset of objects, add the name= S_listOfNames option.
 Note that the archive can also store graphical view parameters, 
tethers between the objects, and a string buffer with the last 
session.
 Example:
  
list binary s_icmhome + "example_docking" 
 Binary file version: 1 
    1 mn_saveAll                     integer                  4 
    2 a                              integer                  4 
    3                    sarray                  28 
    4                       sarray                  28 
    5               sarray                 396 
    6                 grob                100992 
    7                 grob                 88596 
    8 m_gb                           map                 114280 
    9 m_gs                           map                 114280 
   10 biotin                         object                5490 
   11 DOCK1_rec                      object              265167 
   12 displayView                    graphical view         293 
   13                  string                5322 
  
read binary name={"biotin","DOCK1_rec"} "example_docking" 
See also:
 
 | list available sequence databases | 
 list database
 gives a list of BLAST databases which can be used by the find database command for fast 
sequence database searches.   
Normally, your system administrator should update the BLAST sequence files. ICM just needs a path 
to this directory which is defined by the $BLASTDB system variable.   
The output of the command is saved in the S_out array.  
This array can further be processed with the Field function.
 Example:
  
 list database  
 dblist = Field(S_out, 2) # sarray contains search databases 
 show dblist 
 a=Sequence("PDPPLELAVEVKQPEDRKPYLWIKWSP") 
 find database a dblist[2] 
Trouble-shooting: If you get an error message, check the following:
  
check if you have a directory with the blast-formatted files. 
make sure that your s_dbDir variable is defined in your _startup file and  
it contains the path to this directory (do not forget the last slash, 
  e.g. /data/blast/dbf/ ). You can always assign it manually from the command line. 
 
 
 
 
 
See: Sarray( s_filename_filter directory [ all ] ),  sys
 
 
 
 
 list molcart [database=s_dbname]
 
gives a list of tables in the molcart database.
 
See also: molcart, rename molcart
 
 list molcart connect
 
 
 
lists all registered database connections. 
Note that they do not have to be connected to be listed.
 
 
 [ Load conf | Load frame | Load molcart | Load solution | Load stack object | Load object ]load things from the program memory (to load from files use read command). 
The opposite action to load is store. 
 | load conformation from stack | 
 load conf i_confNumber [ sstructure ]
 assign the  i_confNumber-th conformation from the shared  conformational stack  (not to be confused with the embedded object stack)
and to the current object (e.g. when you browse conformations accumulated after a montecarlo run).  
If i_confNumber is zero, the best energy conformation will be loaded.  
Montecarlo stack conformations are sorted according to energy values,  
however you may create your stack manually with an arbitrary order.
 Option sstructure will automatically recalculate the secondary structure according to the hydrogen bonding pattens.
 Note that the full energy of this conformation 
which had been stored in the stack can be accessed by the Energy("func") function.
 
 load conf os1 i_confNumber [os1_target_for_conf_transfer] [ sstructure ] 
 If an object os1 is specified, the conformation is loaded from the object-embedded stack stored in the specified object. If the second object is specified the conformation will be transferred to the target object.
The command will update the information about the current conformation in the object's stack.
 
Examples:
  
 read stack "f1"             # read conformational stack  
 load conf 0                 # set molecule into the best energy conformation  
 display a_//ca,c,n          # display the backbone  
 for i=1,Nof(conf)           # go through all the conformations  
   load conf i               # load them one by one  
   print Energy("func")      # extract its energy 
   pause                     # wait for RETURN  
 endfor 
#
 store stack a_      # move stack to an object
 delete stack        # delete shared stack but keep the in-object one.
 load conf a_ 1
See also:
 
 | load trajectory frame conformation | 
 load frame i_trjFrameNumber [ s_trjFileName ] [ sstructure ]
 load specified frame from the trajectory.  
Note that the full energy of this conformation 
which had been stored by the simulation procedure  
can be accessed by the Energy("func") function. 
Option sstructure will automatically recalculate the secondary structure according to the hydrogen bonding pattens.
 Examples:
  
 build "alpha"     # build extended chain of the Baldwin peptide 
 read trajectory "alpha" 
 display trajectory "alpha" center # a-ha! conf in frame 541 is interesting 
 load frame 541 "f1"          # extract conformation from frame 541 
 print Energy("func")         # print its energy without recalculating 
 | create database table view | 
 
 
 
 
 load molcart table[=s_sql_table] {T|name=s_result_table} [filter=s_filter] [sort=s_sort_columns] [number=i_limit(1000)>] [ <connection_options ]
 
Loads rows from a database table s_sql_table. 
First i_limit rows sorted by s_sort_columns according to conditions specified in the s_filter condition are loaded.
If some options are not provided in the command and the table  is specified as, the following fields from the table header may be used:
 
queryLimit for i_limitqueryOrder for s_sort_columnsqueryFilter for s_filter 
 load molcart table T refresh [connection_options]
 
Reloads requested rows from the database based on the ID values in the primary keys column in . 
Connection may be specified by  connection_options . 
If the connection or the table are not specified, this command tries to get their specification from the table header:
 
querySource specifies the database table in database.table format
queryConnection describes the connection (not by connectionID)
 
Tables produced by the load molcart command are treated as special "database view" tables in the GUI.
 
See also: molcart, find molcart, query molcart
 
 | load a structural alignment solution | 
 load solution [ i_solutionNumber ]
 loads the specified solution previously stored by the 
 align rs_residue1 rs_residue2 .. command. 
The two output selections as_out and as2_out contain equivalent residues of the 
specified solution. The second object will be superimposed according to the Ca atoms of the 
found equivalent residues.
 Example:
  
 read pdb "4fxc" 
 read pdb "1ubq" 
 display a_*.//ca,c,n 
 color molecule a_*. 
 align a_1.1 a_2.1 12 1.5 .1 
 center 
 load solution 2          # load the second best solution 
 color red  as_out 
 color blue as2_out 
 for i=1,10 
   load solution i 
   color molecule a_*. 
   color red  as_out 
   color blue as2_out 
   pause                  # rotate and hit 'return' 
 
 endfor 
 
 
 | load conformational stack from an object | 
 
 
 load stack os [append]
 
extracts the compressed stack from inside the object and overwrites  (or appends)
the existing stack . This mechanism can be used to switch between several
objects withing one session and use their stacks without any need to work with stack files.
Alternatively, in-object-stacks can be saved with the object and read back to a session.
 
Example:
 
  read object "objeWithStack.ob"
  if(Exist(a_ stack)) load stack a_
 
See also:
 
 | load object from parray or parray in a collection | 
 load object objArr  [name=s] [delete]
 
Example:
  
read pdb "1crn"
read pdb "2cpk"
p = Parray(object)
delete a_.
load object p[2]
#
c = Collection()
c["ob"]=a_1.
delete a_*.
load object c["ob"] name="x" 
load object c["ob"] name="x" delete # overwrite the previous a_x.
 
 
 
 
 | ICM-shell macros  and functions | 
 a named group of ICM commands with arguments that can be called and executed from the ICM shell.
A very similar entity is a user-defined (or icm-shell) function that is like a macro but may return a value and be nested.
Macros of functions can be :
 
Macro can call another macro (nested macros).defined or loaded
called/executed 
 Syntax of the macro definition:
 macro  macroName [mute|auto] prefix1_macroArg1 [(default1)] prefix2_macroArg2 [(default2)] ...
 
 icm_commands
 
 endmacro
 
To invoke macro just type its name and provide arguments if necessary. 
 
Naming of the formal arguments of macros and functions. The formal arguments in macros and functions need to be named in a special way to imply the type definition.
For example a formal variable which is meant to be a string need to be called s or s_inputstring
 
Example of a simple macro without arguments:
  
macro creates_a
  # commands 
  a=1
  keep a   # used to push 'a' to the upper level, 'keep global' for all levels.
endmacro  
creates_a  # calling macro a
show a     # checking if it creates variable 'a'
Example of a simple macro with arguments: 
macro countMetalNeighbors as_ r_dist (5.)
  l_commands = l_info = no
  nMetals = Nof( Mol( Sphere( as_ , a_*.M , r_dist ) ))
  print " nMetals = ", nMetals
  keep nMetals
endmacro
read pdb "1are"
countMetalNeighbors a_/his,as* 4.
 
Example of a shell-function (not to be confused with the built-in functions):
 
function Bold( s ); return "<b>"+s+"</b>"; endfunction
Bold("Hey") # returns "<b>Hey</b>"
See also function .
Formal argumentsThe formal argument names should have explicit prefixes 
(i_ , r_ , s_ , l_ , p_ , I_ , R_ , S_ , M_ , seq_ , prf_ , ali_ , m_ , g_ , sf_ , as_ , rs_ , ms_ , os_ , vs_ , see above ) 
to specify their type. The simplest formal argument name is the prefix without the trailing underscore. 
If your argument list is incomplete, you will be prompted for the missing argument. 
Type q or enter empty string 
to quit the macro without execution. 
The following features make ICM macros extremely convenient to use:  
  
Defaults can be provided in parentheses as simple constants (i.e. 
i_window (8) ), or as the whole expressions  
(i.e. i_1 (mncalls) r_a (Sin(*2.)) i_2 ) . Default expressions can also be omitted.no need to explicitly define types of arguments (implicit definition by name) 
one may specify an arbitrary subset of arguments and in arbitrary order 
if the arguments have different types 
an easy and flexible way to provide defaults in parenthesis after the argument 
automatic prompting of the missing arguments by default, or substituting the default values if the macro is defined as auto .
automatic restoration of all the changed standard ICM-shell variables upon execution. 
new variables defined in the macro are local and will be automatically deleted upon execution, unless they are protected with the 
 keep (or keep global ) command. 
 Options
  
 auto automatically use defaults for the arguments missing in the command string.  
Example: nice "2ins". Since the second logical argument l_wormStyle is missing its default value  no  
will be used automatically. 
 mute will suppress automatic prompting. Do not use parenthesized defaults with 
this option. 
 The predefined standard ICM-shell  
 integer, 
 real, 
and 
 logical 
variables, as well as 
 preferences 
(i.e. i_out, l_warn, wireStyle, PLOT.logo etc.)  
are be automatically restored upon completion, if changed in the macro, to 
retain the new value use the 
 keep 
command. Note that the string variables should be restored explicitly. 
Many  
 macros 
are supplied with the program.
 Examples:
  
# display molecule as a worm colored from N- to C- term. 
 macro dsWorm ms_ (a_*) r_wormRadius (0.9) 
  GRAPHICS.ribbonWorm = yes 
  GRAPHICS.wormRadius= r_wormRadius 
  display ms_ ribbon only 
  for i=1,Nof(ms_)           # color each molecule separately  
    color Res(ms_[i]) Count(Nof(Res(ms_[i]))) ribbon 
  endfor 
 endmacro 
To invoke the macro, type
 
  
 read object s_icmhome+"crn"  
 dsWorm a_1 0.7 
or just  
 dsWorm  # and press Enter 
A set of  ICM macros is given in the _macro file. 
See also function
 
 
 
 
 [ Make background | Make bond | Make bond multi | Make boundary | make directory | make disulfide bond | Make drestraint | Make factor | Make flat | Make grob map | Make grob from image | make grob matrix | make grob potential | Make grob skin | Make 3d label | make distance | make hbond | make angle | make torsion | Make image | Make key | make map | make map cell | Make map factor | Make map potential | make molcart | SAR analysis | R-group decomposition | make pca | make peptide bond | Make map xray | Make plot | Make reaction | Make sequence alignment | Make sequence | Make sequence random | make tree | make tree object | Make unique ]is a family of commands which create new objects of parts of them. 
 | make background : spawning background jobs and processing their output. | 
 
 
 make background s_external cmds [command=s_icmCmdsUponCompletion] [info=s_Message] [name=s_jobName] [simple]
 
This command runs a set of external commands written in a form that can be executed 
as an external process. Upon execution of these external commands the ICM client will
receive the s_Message ( by default it will be the following message:
 "background job 'jobName' completed. Press OK to load the results".
You can also specify which commands can be executed by the ICM client to load
the results of this job.
  Arguments:
 
s_externalCommands                              # e.g. "grep a *.tx >! b"  use Path() function to run an ICM thread
name= s_jobName                               # e.g. name= "j1"
command= s_\n_separated_list_of_ICM_commands  # default is empty string.
info= s_completionMessage                     # e.g. "Finished. Press OK to read the model"
 
  The make background command the following features:
 
it is portable and works under different operating systems 
to specify a correct external ICM call, you can use the Path( unix, s_options ), e.g.
 make background Path(unix "_action ") command="read object OUTPUT\nread stack OUTPUT"
 
simple option creates completely detached job. ICM will not keep any information about that process.
This option is useful if you want simply to launch an external program and don't want to have any further 
interaction with it.
 
 
make background "ls > tmp.txt" command="read string \"tmp.txt\" " info=""  
  #  the empty info arg suppressed the dialog
show s_out
#
make background name="job1" Path(unix,"_myScript",{"-n","-s"})  
   # Path(unix,..) returns current ICM location
A Windows example:
make background "\"c:\\Program Files\\Microsoft Office\\WINWORD.EXE\" C:\\Temp\\Doc1.doc" simple
 
See also:
 
 
 | make bond: forming a covalent bond | 
 make bond  as_singleAtom1  as_singleAtom2 [type=i_type]
 
adds a covalent bond between two selected atoms in a non-ICM molecular 
object (e.g. X-ray or NMR pdb-entries) or resets the bond type (for ICM objects use make bond simple
The command is used to correct 
erroneous connectivity guessed by the read pdb command.  
This correction makes the molecule displayed in the graphics window look 
better and is necessary before conversion into an ICM molecular library entry  
(see icm.res or user library files) using the write library 
command.  
It can also be useful to display a connected Ca-trace.  
In interactive graphics mode you may type make bond 
and then click two atoms with the Control button pressed. 
 The type= option allows one to set the bond type ( i_type ={1|2|3|4} ,  
for a single (default), double, triple and aromatic bond, respectively.
 
 make bond simple  as_singleIcmAtom1  as_singleIcmAtom2 
 
forms a bond, e.g. for peptide cyclization. One needs to unfix the following energy terms for
that bond to be minimized properly:
 
build string "ala ala ala ala ala"
make bond simple a_/1/n a_/5/c
set term "bb,bs,af"
minimize
 
 
 | make bonds in an atomic chain | 
 make bond chain as_chainOfAtoms
 connects specified atoms in a linear chain. Useful for PDB entries 
containing only Ca atoms.
 Examples:
  
 read pdb "4cro"        # contains only Ps and Ca's 
 display                # Milky sausage 
 make bond chain a_4cro.//p   # connect P atoms of the DNA backbone 
 make bond chain a_4cro.//ca  # connect Ca atoms of the protein backbone 
See also: 
 delete bond. 
 
 | make boundary: Poisson electrostatics | 
 a command to prepare for the boundary element electrostatic calculation
 make boundary [as]
 this is an auxiliary command which is required if you need to calculate the 
electrostatic free energy with the  boundary element method several times.  
Optional atom selection  as_ from which the electrostatic field is calculated 
can be specified. 
This may be the case if the charge distribution changes but the shape does not.  
However, the boundary does depend on the dielectric constant parameters such as 
 dielConst and dielConstExtern . If you intend to change them the boundary need to 
 be remade every time. 
This command does not generate any output by itself,  
it just creates the internal table which can later be used by the 
 show energy command or the Potential( ) function.
 The dielectric boundary is a smooth analytical surface which is built with the contour-buildup 
algorithm (  Totrov,Abagyan, 1996  ). The surface looks like the skin surface, but uses 
different radii which were optimized against experimental LogP data. Both skin and the dielectric 
boundary uses the same water radius ( the waterRadius parameter). The "electrostatic" 
radii used by ICM to calculate the boundary are stored in the icm.vwt file.
 See also: 
  REBEL, 
 surfaceAccuracy,
 electroMethod, 
 delete boundary, 
 show energy", 
 term "el", 
 Potential( ).
 Examples:
  
 electroMethod="boundary element" 
 read object s_icmhome+"rinsr" 
 delete a_w*                                     # get rid of water molecules
 make boundary a_1 surfaceAccuracy = 5           # calculate params of the dielectric boundary 
 show energy "el"                                # electrostatic energy by BEM 
 e1=Energy("el")                                 # extract the energy
 set charge a_/33/cd*,hd*,ne*,he*,cz,nh*,hh* 0.  # uncharge arg33
 show energy "el"                                # electrostatic energy of the uncharged Arg33
 e2=Energy("el")                                 # extract the energy
 print e1-e2 
 delete boundary                                 # memory cleanup 
 
 
 
 
 make directory  s_Directory 
 make specified directory. Example:
  
make directory "/home/doe/temp/" 
See also: sys , set directory, delete directory, Path(directory) 
 
 make disulfide bond [ only ] as_atomSg1 as_atomSg2
 form breakable disulfide bonds between two sets of specified sulfur Sg atoms, 
regardless of the distance between them. Forming the bond means that two 
Hg hydrogens of Cys residues are dismissed, a covalent bond between two Sg 
is declared (but not enforced) 
and four local distance restraints (see 
 icm.cnt) 
are imposed. These restraints are indeed local, since two Sg atoms only start 
feeling each other when they are really close, otherwise the energy contribution 
is close to zero 
. Option only causes deletion of previously formed 
disulfide bonds, otherwise the new one is added to the existing list of 
disulfide bonds.
 
Examples:
  
 build string "se cys ala cys" # sequence containing two cysteins 
 display                       # display an extended ICM model of the sequence 
                               # set only one SS-bond, disregard all previous 
 make disulfide bond a_/1 a_/3 only   
 montecarlo                    # MC search for plausible conformations 
See also: 
 delete disulfide bond 
and  (important!) 
 disulfide bond.
 
 | make drestraint: extract distances structure | 
 make drestraint as_select1 as_select2 r_LowerBound  r_UpperBound r_LowerCorrection r_UpperCorrection [s_fileNameRoot]
 create two files containing the list of all the atom pairs specified by 
two selections (i.e. a_* a_* - all the pairs; a_1//* a_2//* atom pairs 
between molecules 1 and 2 for which the interatomic distance lies between 
 r_LowerBound and r_UpperBound.
 Note: it is critical that both selections are in the same object. 
Only tethers can pull to atoms of a different object.
 For each pair of atoms a 
 distance restraint type 
is created with lower bound less than the actual interatomic distance by 
 r_LowerCorrection and upper bound greater than the actual 
interatomic distance by r_UpperCorrection. This command can be 
used for example to impose loose distance constraints between two subunits.
 The number of the formed drestraints is returned in the 
 i_out variable.
 See also: 
 set drestraint as_1 as_2 i_Type
 if you want to impose a specific drestraint.
 Examples:
  
 read object s_icmhome+"complex"  # load a two molecule complex for refinement  
                                  # extract all Ca-Ca pairs between 2 and 5 A  
       			          # for each pair at distance D create distance  
                                  # restraint type with lower bound D-2.5 and  
                                  # upper bound D+2.5  
 make drestraint a_1//ca a_2//ca 2. 5. 2.5 2.5 
 
 | make factor: FFT calculation of diffraction amplitudes and phases | 
 make factor map_Source  {I_3Maximal_hkl | r_resolution} [s_factorTableName[s_ReName[s_ImName]]]
 calculate structure amplitudes and phases from the given electron density 
map by the Fast Fourier transformation. The table ' s_factorTableName'  
with h,k,l and structure factors  
will be created (further referred to as T for brevity).  
It will contain the following members:
  
If structure factor table s_factorTableName  already exists, 
structure factor real and imaginary components are created or updated 
in place. Any other arrays containing experimental, derivative or control 
information may be added to the table and participate in selections and sorting. three  
 integer arrays of Miller indices: T.h T.k T.l 
 two  
 rarray of real and imaginary parts of the calculated  
structure factors. Default names:  T.ac and T.bc, respectively. 
Alternative names can be explicitly provided in the command line. 
 Example:
  
 read map s_icmhome+"crn"     # load "crn.map"  
 set symmetry m_crn 1 
 make factor { 5 5 5 } "F"    # h_max=k_max=l_max=5  
                              # F.h, F.k, F.l, F.ac, F.bc are created  
 show F   
 group table append F Sqrt(F.ac*F.ac + F.bc*F.bc) "Fc" Atan2(F.bc,F.ac) "Ph" 
 sort F.Fc 
 show F   
 
 
 
 make flat chem_array [rotate] [hydrogen] [window=r_WidthToHeightRatio] [index=I_indices] [pattern=X_scaffold]
 
convert a chemical array into standard automatically generated 2D chemical drawings in place
(compare with Chemical( Smiles( chem_array ), smiles ) which does not touch the source array).
A chemical array can created by the  read table mol command. 
The compounds in the source file can be 0D (all coordinates set to 0), 3D or 2D. 
In all cases these x and y coordinates are can not be used for chemical drawing and
one needs to use the above command to generate 2D drawings.
The command also preforms rotation for optimal fit into rectangle with specified width to height ratio ( window argument ).
Default ratio is 1.5.
 
Other options:
 
rotate   : does not coordinate assignment, preforms only best fit rotation
hydrogen : keep explicitly drawn hydrogens
index    : performs operation only on selected compounds
pattern  : scaffold with assigned 2D geometry 
 
Example:
 
 read table mol s_icmhome+"template_3D.sdf"
 make flat template_3D.mol
See also: Chemical , read table mol . 
 
 | make grob map command to contour electron density or grid potentials | 
 make grob m_map [header] [solid] [box] [I_indexBox[1:6]] [[exact] [field=]r_sigma|r_absValue] [as [margin=r]] [name=s]
 
 make grob m_map add r_sigmaIncrement 
 make grob m_map add exact r_absoluteIncrement 
# build a contour that can be modified
 
 make grob g_existingContourGrob add r_sigmaIncrement 
# rebuilds and redraws an existing contour
 
Create graphics object by contouring electron density map at a given threshold. 
 
threshold: By default the contouring level is calculated as the mean map value (returned 
by Mean ( m_map ) ) plus mapSigmaLevel times root-mean-square deviation value.  
If a real value argument is provided, the  mapSigmaLevel shell variable is redefined. 
Option exact  allows one to specify absolute value at the contouring is performed. 
If atom selection is specified, contour will only be built around as_, with the optional additional margin. Helpful in contouring ligand from electron density map.
 
The grob can be 'link-grob{linked} to a set of molecules in one object, or to the whole object to 
 change coordinates in 3D the grobs together the those molecules upon connecting and interactive 3D translations and rotation, or upon superposition. 
 
Other options:
 
Example:header this option adds the name of the source map and the command to recalculate the grob at different contour level.
  
 build string "his glu"   
 make map potential Box( a_ 3.)  
 make grob m_atoms 3. # 3 sigmas above the mean  
 #  make grob m_atoms .2 exact # countour at 0.2 level 
 #  .2 or .1 exact is useful to detect almost closed pockets  
 display g_atoms 
 # 
 make grob m_atoms exact 0.15 # at value of 0.15 
 display g_atoms 
 #
 mapSigmaLevel = 1.5
 make grob m_atoms add 0. # at mapSigmaLevel
 make grob g_atoms add -0.1 # at 1.4 sigma
 #
 loadEDS "1atp" 0.
 read pdb "1atp"
 make grob m_1atp 1.5 a_atp 
 cool a_
 display g_1atp
 Defaults:
  
Option solid tells the program to create a solid 
triangulated surface which can later be displayed by 
 display grob solid 
command. The threshold is expressed in the units of standard deviations 
from the mean map value, i.e. 1.0 stands for one sigma over the mean. 
 I_indexBox [1:6] is optional 6-dimensional 
 iarray 
containing 
{ i_startSection i_startRow i_startColumn i_NofSections i_NofRows i_NofColumns }. 
It overrides the default, contouring the whole map. create simple chicken wire map (sections in three sets of planes, NOT solid) 
 take the  current map; 
 generate the name of the grob which is the same as the map name except for the g_ prefix; 
 contour the whole map 
 use threshold value from the ICM-shell real variable mapSigmaLevel . 
 mapSigmaLevel is changed if the exact option is used
 Option box adds surrounding box to the grob.
 
 
 | make grob image command to create a vectorized graphics object. | 
 make grob image [name=s_grobName]
 create a vectorized 
 graphics object (grob) 
from the displayed wire or solid objects. The information about colors will be 
inherited. Very useful if you want to export wire, 
 ribbon 
or CPK into another graphics program, since graphics objects can be  
 written 
in portable Wavefront (.off) format. Further, graphics objects can exist 
independently on the molecules which may be sometimes convenient. Also, underlying 
lines and vertices can be revealed. The graphics object created from the displayed 
solid representations assigns and retains color information as lit in a given 
projection. These colors can not be changed. Use special  
 make grob skin 
command to generate a more elaborate graphics object from skin .
 Examples:
  
 read object s_icmhome+"crn"
 ds a_crn.//!h* ribbon         # ribbon  
 make grob image name="g_rib" 
 display g_rib smooth only     # try select g_rib and Ctrl-X,Ctrl-E/W etc. 
                               # option smooth eliminates the jaggies. 
 write g_rib                   # save to a file 
 
 make grob [solid] [bar[box]] [color] M_matrixName [r_istep r_jstep r_kstep] [[name=]s_grobName]
 
  Create a three-dimensional plot from M_matrixName, so that 
x=i* r_istep, y=j* r_jstep and F(x,y)= k* M_matrixName[i,j]. 
Options:  
 bar : generate rectangular bars for each i,j matrix value instead of a smooth surface. 
 box : add a box around the 3D histogram 
 color : color grob by value according to the PLOT.rainbowStyle preference. 
 solid : tells the program to triangulate the surface 
   Examples:
  
 read matrix s_icmhome+"def" 
 make grob def solid 
 display 
# OR 
 read matrix s_icmhome+"ram"               # phi-psi energy surface  
 make grob ram 1. 1. 0.1                   # create the surface  
 display g_ram magenta                     # display it  
 make grob solid ram 1. 1. 0.08 name="g"   # create the surface  
 display g solid gold                      # display it  
 
 
 make grob potential [solid] [as_1 [as_2]] [[field=]r_potentialLevel] [grid=r_gridCellSize] [margin=r_margin] [[name=]s_contourGrobName]
 
Example:
 
make grob potential a_lig 
 create graphics object of isopotential contours of electrostatic potential  
which takes not only the point charges but also the dielectric surface charges 
resulting from polarization of the solvent.  
This potential need to be calculated in advance by the  
boundary element algorithm.  
Contours can be displayed in the wire and solid representations (see also 
 display grob).  The default parameters are:
  
See also:  
 make map potential, 
 electroMethod, 
 make boundary, 
 show energy "el", 
 term "el", 
 Potential( ). r_polentialLevel  0.     kcal/mole/electron_charge_units.
 r_gridCellSize    0.5 A  (you may want to increase it up to 2A for speed). 
 r_margin          5.0 A  (you may want to reduce it for speed). 
 Examples:
  
 build string "se his arg glu"   
 electroMethod="boundary element" # REBEL algorithm  
 make boundary 
 make grob potential solid 0.1 grid=2. margin=4. name="g_equipot1"
 display g_equipot1 transparent blue 
 make grob potential solid field=-0.1 grid=2. margin=4. name="g_equipot2"
 display g_equipot2 transparent red  
 ds xstick residue label 
 
 
 | make grob skin or surface | 
 make grob skin [wire | smooth] [as_1 [as_2]] [[name=]s_grobName] [r_transparency]
 
 make grob surface [color] [wire | smooth] [as_1 [as_2]] [[name=]s_grobName] [r_transparency]
 
 | create grob containing the specified  molecular surface (referred to as skin).  
If the wire option is given the transparent wire grob 
will be created (solid grob is the default). 
It will have the same default color.  
The disconnected parts of this grob may later be split .  
The grob will be named by the default name g_objName unless  
the name is explicitly specified.  
  The final actual name will be returned in s_out . The smooth option allows one to close the cusps. This closure is necessary to  
enable the compress grob operation.
 The compress g_ command allows one to dramatically simplify the triangulated surface 
and reduce the number of triangles. Typically compress g_ 1. will reduce the 
number of triangles by an order of magnitude.
 
 |   | 
 A grob can later be colored with the color grob potential command.
 Examples:
  
 read object s_icmhome+"crn"   
            # skin around a substructure, (just as an example) 
 make grob skin a_/1:44 a_/1:44 0.6 
 split g_crn_m 
 display g_crn_m2  a_//* 
 show Area(g_crn_m2), Abs(Volume(g_crn_m2)) 
 
 make grob skin a_ a_ name="gg1" # display gg1 now 
 make grob skin wire  name="gg2" # display gg2 now 
 
 make grob skin smooth a_/1:20 a_/1:20  name="gg3"
 compress gg3 1. # simplifies the surface 
The transparency can also be set with the set grobname r_transparencyLevel
command.
See also: set color   to set atom colors
 
 
 | Creating 3D label objects | 
 
 
A number of commands in ICM enable the creation of "3D label" objects which help to measure and annotate geometry in the 3D space,
like distances and angles. Some 3D labels, like hydriogen bonds, illustrate concepts which depend on the geometry 
and the structure of molecules.
3D labels are stored in a parray object of a "label3d" subtype. 
 
3D labels defined on atoms are dynamic: visual angle/distance information is updated depending
on the changes in the atom geometry.
 
3D label creation commands have similar structure.
Commands which are currently available are:
 
Each of these commands has specific arguments. but there is a number of common options:
 
| name = s_n | the name of the created array of 3D labels |  | append | append new 3D labels to the existing array; |  | delete | forcefully delete the array before repopulating it with 3D labels; |  | refresh | keep all existing 3D labels which are outside the specified selection, rebuild 3D labels inside the selection; |  | display | display the created labels. |  
 make distance as_1 [as_2|auto] [molecule|align] [r_maxdist] [3d label options]
 
creates a parray with distances between all atoms in as_1 and as_2, 
or all atoms within as_1 if the second selection is not specified.
 
Output 
the distance parray
i_out with the number of distances in that parray
 
 
Examples:
 
 read object s_icmhome+"crn"
 display ribbon wire
 make distance a_//oe* a_//ne,nh* display
 make distance a_//oe* a_//ne,nh* 5. delete display
 
Example in which we detect clashes:
 
  make distance a_//!vt* a_//!vt* 1.5 # creates a distance object
  CLASHES = Table( $s_out distance )  # s_out stores name of distance-object
  sort CLASHES.dist 
  show CLASHES.dist<0.8
 
See also:
 
 make hbond as_1 [as_2 | auto] [molecule | align] [r_maxdist] [3d label options]
 
creates an array with all hydrogen bonds contained in as_1, or between as_1 and as_2 if the second selection is specified.
Hydrogen bonds are calculated according to several shell parameters listed below.
It is possible to specify the upper limit for the distances between atoms which will be considered as potential bond
using the r_maxdist value.
 
Other options and shell parameters:
Examples: 
 read object s_icmhome+"crn"
 display ribbon wire
 make hbond a_ display GRAPHICS.hbondMinStrengh=0.5 name="x"
 t = Table(x,distance)
 sort t.dist
 show t[1]
 
See also:
 
 make angle as_3_connecting_atoms [3d label options]
 
creates a planar angle 3d label. Requires a selection containing 3 connecting atoms.
 
See also: make 3d label , Table(angles,distance)
 
 make torsion as_4_connecting_atoms [3d label options]
 
creates a dihedral angle 3d label. Requires a selection containing 4 connecting atoms.
Examples:
 
 read object s_icmhome+"crn"
 display ribbon wire
 make angle a_/22/c | a_/23/n,ca display
 make torsion a_/22/ca,c | a_/23/n,ca display
 
See also: make 3d label , Table(tors, distance) .
 
 
 | make/store graphical image to image parray | 
 
 
 make image [library=s_albumName] name="Party2007.png"
 
will save the graphical image to the internal album (a parray ). 
The name will be used if you decide to save the album to a file.
 
Example:
 
make image  # will create album if it does not exist
make image  # 
make image  # 
delete variable album 2
 
 
 make key {s_smiles | as} [S_arrayOfFragmentSmiles]
 Note:  the make key command is obsolete. The new chemical fingerprints are dynamic and
does not have a predefined set of fingerprints of variable length. 
The new fingerprints are used in the following commands and functions:
 
This command generates a binary chemical key, i.e. a bit-string in which each bit corresponds to  
a chemical substructure, converts the bit-mask into 
the hexadecimal string and saves this hex-string in s_out .  
The bit-string with chemical substructure information can then be 
used to calculate the Tanimoto similarity distance with another chemical key. 
 By default the make key command uses a built-in array of 96 substructures, 
and generates a 24-character hex-string ( each hex-character codes for 4 bits ), 
however any string array of subfragment smile-strings ( S_arrayOfFragmentSmiles )  
can be provided.
 The hex-string can be converted back into an array of bits packed into  
integers with the Iarray( { s_chemkey | S_chemkey } key ) function.
 The bit-distance matrix between two arrays of bit-strings represented by two iarrays  
can be calculated with the  
  
 Distance( Iarray( S_1 key ) Iarray( S_2 key ) i_nBits [ key ] )  or 
  
 Distance( Iarray( S_1 key ) Iarray( S_2 key ) i_nBits simple )  
  
functions, where the number of bits, i_nBits, is usually 96,  
unless you use a user defined array of fragments. There is also a weighted form 
of the chemical key distance (see the Distance function). 
By default, or with the key option, the function returns matrix with  
the  Tanimoto similarity distance (0. all bits are the same, 1. no bits in common),  
while with the simple option the second chemical key is considered as 
a sub-fragment and the distance becomes 0. (identity) if the sub-fragment is  
present in the first bit-mask.
 Examples:
  
  read mol s_icmhome+"ex_mol.mol" 
  S_key = Sarray()
  for i = 1, Nof(a_*.)
    set obj a_$i.
    build hydrogen 
    set type mmff 
    convert 
    smil = Smiles(a_) 
    make key smil 
    S_key = S_key // s_out
    delete a_
  endfor
  S_key
 
 
 
A family of commands producing maps. It includes:
 
 make map cell R_6cellParameters I_3NofSteps [R_6box | I_6box]  ["zxy"] [as] [name=s_mapName]
 create an electron density distribution for atom selection as_  
(all atoms of the current object by default) on a three-dimensional grid. 
See also make map potential for a rough electron density map. 
The electron density is calculated from the cartesian coordinates of the 
selected atoms using a 2-Gaussian approximation. If the l_xrUseHydrogen logical 
is set to no , hydrogen atoms are ignored. 
The following parameters are taken into account:
  
the shape of the Gaussian is influenced by the individual atomic b-factors (see set bfactor). 
addBfactor is added to individual atomic B-factors  
 R_6cellParameters is a real array containing { a b c alpha beta gamma } parameters. Optional 
 R_6box or I_6box arrays define the corner of the map box 
(closest to the origin) and its sizes  
( { x1 y1 z1 dx dy dz } or { nx ny nz dnx dny dnz }, respectively).  
The whole cell is taken by default.
 Examples:
  
 read object s_icmhome+"crn" 
 make map cell {5. 5. 5. 90. 90. 90.} 0.5 a_//ca,c,n 
 
 | make map factor : calculate electron density map from structure factors | 
 make map factor [T_factor] [m_map]
 calculate an electron density distribution on a three-dimensional grid from a 
 structure factor table of the Miller indices, reflection amplitudes and phases.  
Requires that the map is created before with the make map command. 
If optional arguments are not given the current map 
and/or current factor will be used.  
A new empty map can be created from an empty selection by the
 
  
 make map a_!*  
parameters # see the 
make map cell command. 
 
 | make map potential: grid energies, converting crystallographic electron density maps | 
 
 | 
 make map potential [simple|occupancy] [s_terms | name=s_mapname] [as] {[R_6box] [r_gridCellSize] | cell=map } [ l_ecep=no|yes ]
 create a property map for the as_ selection.  
This command is used for low-resolution surface generation or to make  
grid potential maps for fast docking. 
The optional arguments are the following:
  
s_terms : a smooth Gaussian atom density map is generated by default, 
  otherwise the grid energy maps specified by the 2-letter terms are calculated, e.g. gc,gh,gs,ge,gp ). 
The names of the generated maps are standard and can not be changed. Map m_gl is created along with m_gc  for atoms larger than carbon.
as_ selection : All atoms of the current object are taken by default.  
r_gridCellSize : by default is 0.5 A for small objects, the default increases with the size of the object. We do not recommend to use values over 7 A for very large objects.  
R_6box : default it is a box around the selected atoms plus 3A margins.  
  The box defines coordinates of the two opposite corners of a box (see also the Box function).  
Option cell = map replaces the box and the grid size and uses the parameters from the map instead. This option also allows one to use an oblique cell.
flag l_ecep = no this option affects the "gb" hb-donor field calculation (see below). It allows one to project the field from the donors (i.e. D-H) and for the hbond acceptors further away from the donor atom along D-H bond vector to map out a realistic location for a heavy atom acceptor.
 
The default map (with no terms provided) will return an electron density map. It supports the occupancy argument as well.
 
Each individual term (say, "gp") may result in creation of one or several (up to seven) 
different grid maps. These are the maps created under different terms:
 
"gh" : m_gh (grid for hydrogen probe)
"gc" : m_gc (grid for a standard heavy atom probe, say C,N,O), m_gl (grid for large atoms, like metals and halogens)
"ge" : m_ge (grid for electrostatic potential)
"ge" with Generalized Born ( electroMethod = 5): m_ge   
"gb" : m_gb (grid for the hydrogen bonding potential). Combines donor and acceptor fields. l_ecep variable affects the donor field.
"gp" : up to seven APF grids named as m_g1, m_g2, m_g3, m_g4, m_g5, m_g6, m_g7 |   |  | m_atoms contoured at 0.3 exact level. The 0.5 level is closer to the van der Waals surface. | 
 
  
 default (no terms specified): atomic density map m_atoms ; if contoured,  
     m_atoms generates a smooth Gaussian envelope around a molecule (see Figures) 
simple  : option to enforce a single m_gc map instead of the default pair of maps: m_gc and m_gl.occupancy  : option to attenuate the map intensity by the atom occupancy.
 
 build string "his arg" 
 display cpk 
 make map potential Box( a_ 3.) 
 
# wire surface 
 make grob m_atoms 0.3 exact  # contours near vw-radius.  
 display g_atoms  
 
# solid surface 
 make grob m_atoms solid 0.5 exact   
 display g_atoms smooth 
 term "el", map m_el : Coulomb electrostatic grid, contributions truncated 
at +-100. kcal/mol. 
 
 build string "se his arg" 
 make map potential "el"  Box( a_/1,2/* , 3. ) 
 display a_ 
 display map m_el {1 2 3} 
 make grob m_el exact  # contouring at 0. potential  
 display g_el 
 set occupancy a_/arg/!ca,c,n,o,cb  0.3
 make map potential simple occupancy "gc"  Box( a_/1,2/* , 3. )  
# enforce a single map with attenuated side chain
 term "gh" : van der Waals grid for a hydrogen probe,  
grid potential is truncated from above according to the 
 GRID.maxVw parameter; 
 
 term "gc", map m_gc : van der Waals grid for a carbon probe; 
grid potential is truncated from above according to the 
 GRID.maxVw parameter;  By default, terms "gc" will generate two maps: m_gc and m_gl , 
 the van der Waals map for large atoms with van der Waals radius larger than 1.8A. 
 To enforce pushing all non-hydrogen atoms to a single m_gc map, use the simple option.
 
 
 term "ge", map m_ge : electrostatic grid; 
grid potential is truncated from above and below according to the 
 GRID.maxEl and 
 GRID.minEl parameters; 
 
 term "gb", map m_gb : hydrogen bonding grid; 
 
 term "sf", map m_ga : surface accessibility grid.  
This map is not an independent term, but allows one to correctly 
calculate atomic accessible areas if a part of the system  
is presented by the grid potentials. If a map named m_ga 
is present it will be automatically taken into account 
in energy calculations of the "sf" term. 
 Fine-tuning the maps 
Sometimes you want the van der Waals grids, "gh" and "gc", generated from the whole receptor, 
while the "ge" or "gb" grids generated only from a small region of the receptor. 
In this case you can run the command two times with different source-atom selection.
 Example:
  
 read object s_icmhome+"crn"
 make map potential "gh,gc" a_1 Box(a_1) 
 make map potential "gb,ge,gs" a_1/15:18,33:46 Box(a_1) 
 write m_ge m_gc m_ge  # write three maps at once 
 A different method is to use the  
 Bracket( m, R_6box ) function which sets 
everything beyond the box to zero. Noted that the in the above method only the selected residues make contribution. 
In the following method all residues make contribution, and then the resultant map is truncated in space. Example:
  
 rename m_ge m_ge1  # Compare with the map generated in previous example
 make map potential "gh,gc,gb,ge,gs" a_1 Box(a_1) 
 m_ge = Bracket(m_ge, Box( a_1/15:18,33:46 ))     # redefine m_ge 
 display m_ge 
 display m_ge1
 
See also:
  make map potential m_electronDensity  to generate a rectangular grid from
an oblique crystallographic density map. 
 
 
 
 
 make molcart table T name=s_dbtable [ make_options] [ connection_options ]
 
Imports data from ICM table T_ into database table s_dbtable. 
 make molcart table s_filename [ mol | smiles | separator [header] ] name=s_dbtable [ make_options] [ connection_options ]
 
Imports data from the s_filename file into database table s_dbtable. 
The file format may be guessed from the s_filename or specified explicitly. Supported formats are:
 
For CSV files the header directive tells to treat the first row in the file as column namesmol for SDF
smiles for SMILES
separator for CSV
 
Connection may be specified by  connection_options .
 
Other options ( make_options ) available:
 
append : append to an existing database table (as oppposed to overwriting it)
 column= S_column_specs  : allows one to specify requested columns and some other properties of them in a special format.
 
 make molcart table input=<[s_connectionID;][s_db.]s_sourceTable> name=<[s_db].s_targetTable> [append] column=S_column_specs connection_options
 
Copies data from one molcart table to another.
 
input : string which contains source table table name (from which data will be copied). 
Optionally you may add connection ID and database name.
name : string which contains target table and database (optionally) names.
append : append to an exiting table. If table does not exist it will be created.
column : sarray with column names to be copied. By default overlapping subset of column names between two tables will be used.
 
Example:
 
add column t Chemical({"CCC","CCO"})  # create a local table 
make molcart table t name="test.t"    # copy it to molcart
make molcart table input="test.t" name="test.tt"  # make another copy
make molcart table input="test.t" name="test.tt" append  # append the same table again
print  Nof( "test.t" sql ),  Nof( "test.tt" sql )  Nof( "test.tt" molcart unique )
See also: molcart, write molcart.
 
 
 
 make molsar {T_chemicalTable|X_chemicalArray} X_scaffold [auto] [append] [name=s_ResultTable>]
 
Performs R-group decomposition using X_scaffold. This command is similar to split group command.
The only difference is that single table will be generates. For each R-group in the X_scaffold a column
will be created.
 
With append option the original compound will be added to the result table.
 
With auto option no explicit R-group specification is needed. The command will automatically find
attachment positions and create appropriate columns. Columns which are invariant (no changes in substituent)
will be excluded.
 
Example:
 
group table t Chemical( { "C1NC(C(C1O)O)CO","C1NC(C(C1O)C)CO" } )
make molsar t Chemical("C(NCC1)C1") auto name="tsar1"
make molsar t Chemical("C(NC(C1)[R1])C1[R2]") auto name="tsar2"
See also: split group , split-groupenumerate-library , make reaction , Replace chemical , Find chemical 
 
 | split molsar: generate SAR table from the result of `make-molsar | 
 
 
 split molsar {T_chemRgroupTable|R1_col R2_col} [R_propColumn1 R_propColumn2 ...] [name=s_sarTable] [color=R_] [rainbow=s_rainbow]
 
generates one or more 2D SAR analysis tables from the input R-group columns.  
 
 
group table t Chemical( { "C1NC(C(C1O)O)CO","C1NC(C(C1O)C)CO" } )
make molsar t Chemical("C(NC(C1)[R1])C1[R2]") auto name="tsar2" append
split molsar tsar2.R1 tsar2.R2 
 
 
 
 make pca [append] T [i_nPC=3] [r_tradeoff=0.010000] [options]
 
  Options: 
 
 name= s_prefixForPCcolumnNames, e.g. make pca t name="pc" will create columns pc1 and pc2 select= I_rows , allows one to specify rows should be analyzed that e.g. 1,2,5,8,12. Other rows will get zero values. 
 column= S_columnNames , allows one to specify columns for the PCA analysis. The column names can be specified in any of these formats: 
 "colName" , ".colname" , "tabname.colname", e.g. {"A","B","C"} .  See also Name (e.g. Name( t number ) for the names of all numerical columns . 
 
 
 make peptide bond  as_C  as_N_or_S
 form the peptide bond between two selected C- and N- atoms, or the thioester bond  
between C- and S- atoms. The bonds may be formed 
between the terminal amino- and carboxy- groups (a_/1/n and the last c), 
as well as between such amino acid side-chains groups as  
a_/lys/nz and a_/asp,asn/cd, a_/glu,gln/cg. 
The energy restraints for form the additional chemical bond will be calculated under the "ss" term
and can be viewed with show drestraint
See also: 
 delete peptide bond 
  How to modify an ICM-object .
 Example:
  
 build string "se nh3+ gly gly gly gly gly his"  # notice: NO C-term group
 display 
 make peptide bond a_/nh3*/n a_/his/c       # form a cyclic peptide 
# display drestraint 
 minimize "ss" 
 minimize "vw,14,hb,el,to,ss" 
# 
# form thioester bond 
# 
 build string "se cys ala ala ala glu" 
 display 
 make peptide bond a_/1/sg a_/5/cd  
 minimize "ss"  # term "ss" is responsible for the extra drestraints 
 
Note that this method uses distance constraints (as it is done for the disulfide bonds) to support the closure. 
Another method:
 
make bond simple .. .. 
set term "bb,bs,af"
will use the force field to keep the peptide closed. 
 
 | Generate an attractive grid map from crystallographic electron density map for refinement | 
 
 
 make map potential map_Xray [as] [R_6box] [r_gridCellSize]  [smooth] [name=s]
 
converting crystallographic density map which is not suitable for energy manipulations 
to a grid potential m_xr .  The source map starts at {0.,0.,0.}, can be oblique with uneven spacing. 
However the resulting map is always equally spaced rectangular map in any area of space.
This grid potential can be used in real space refinement.
Find the description of the arguments in make map potential command.
 
Option smooth uses the Gaussian smoothing of the values.
 
 
loadEDS "1atp" 0.  # downloads electron density map m_1atp 
read pdb "1atp"
make map potential m_1atp a_atp # map around around ATP
m_gc = - m_xr  # a possible use. Also possible with "gp"
set terms "gc" # add gc germ for minimization
 
See also:
 
 
 | make plot: Adding a scatter plot or a histogram to a table | 
 
 
 make plot T s_plotArgs [name=s_plotname [append]]  # GUI, interactive plot in an open ICM session
 
 make plot T s_plotArgs [output=s_fileName [window={i_w,i_h}]] # generate and save the image to file
 
This command creates a plot belonging to table T .  The first one will create a plot in your open ICM session next to a table, of your choice, while the output= and window= options result in creating this plot and directly saving it as an image to a file. 
 
Each table can contain multiple plots and all the plots created interactively belong to the following sarray of the table header: T.plot, e.g. T.plot[1] . Note that it is an array because the same table may have multiple plots associated with it. 
One can actually build a plot interactively, then look up T.plot[1] save it, and use as a template of as regeneration of the plot from command line. 
 
 The s_plotArgs string contains the arguments, e.g. 
 
  x="Random(1.,10.,100)"
  add column t $x $x Shuffle(Sarray(50,"red")//Sarray(50,"blue")) $x $x  name={"x","y","C","S","sz"}
  make plot t "x=A;y=B;color=C;shape=D;size=E;"  # or
  make plot t "x=A;y=B;color=C;;element=rectangle;center=1.3,2.4;radii=1.3,2.0;color=red"
  add header t Matrix(10) name="mt"
  make plot t "matrix=mt;rainbow=white/yellow/green"
 The syntax of the s_descr string containing other arguments of the make plot command
is the following. 
  plot_element[;;plot_element2;;...][general_plot_properties]
 
Plot elements.Each double-semicolon separated section is either a plot/histogram or a geometrical element.
 
Scatter plot argumentsXY scatter plot, contains both x= and y= plus optional color= , rainbow= and size= .
histogram data plot, contains either x= OR y= , not both of them, plus 
element=rectangle;center=x,y;radii=rx,ry
element=rectangle;x1=x1;y1=y1;x2=x2;y2=y2;
element=ellipse;center=x,y;radii=rx,ry
element=polygon;xy=x1,y1,x2,y2,..
 
x=columnName # must be present
y=columnName # must be present
color=color_or_columnName;
(requires color= ) rainbow=color1[/color2...][,from:to]
  (e.g.  make plot t "x=A;y=B;color=C;rainbow=red/white/blue,100:150,linear/0:0/0.7:0.5/1.:1"
size=number or column;
name=string name of curve;
shape=shapeName_or_columnName. The shape names are the following:
 shape=Circle|DTriangle|Diamond|Cross|DiagCross|UTriangle|LTriangle|RTriangle|Pentagon|Hexagon
  (the specification is case insensitive, e.g. shape=diagcross )
labels=columnName ( or label= )
labelFilter=string ( Example: x>5&y<=10 )
regression=linear|logarithmic|no
style=dots|connected|splines|bars|triangles
xerr=columnName # X axis confidence interval
yerr=columnName # Y axis confidence interval
tooltip=col1,col2,...   Comma separated list of column names for balloon popup when user move mouse over the curve dot.
 
Histogram plot arguments 
 The syntax of the columnName can refer to one or multiple columns as follows:
  columnName|{columnName[,columnName...]}
 
 A distinct columnName can be further split by another columnName as such:
  columnName[:columnName]
 
x=columnName or y=columnName # must be present
pinwheel=color[/color...] 
  (e.g.  make plot t "x={A,B,C,D};pinwheel=red/blue"
step=bin size 
  (e.g.  make plot t "x=A;step=20"
binWidth=relativeBinWidth[0.,1.] # (saved on exit)
 
Examples:
 
group table t Random(1. 10. 40) Random(1. 10. 40) Iarray(20,0)//Iarray(10,1)//Iarray(10,2)
make plot t "x={A,B}"
make plot t "x=A:C"
General  Properties  (all are optional, and added at the end after )All general properties are added at the end of the plot string, with each argument separated by two semicolons (;;), e.g. make plot  "x=molWeight;y=nof_Atoms;;title=MY Title;;xTitle=MW;;yTitle=Natoms" 
title=plot_title # must be added AT THE END OF THE STRING after two semicolons (;;title=..)
xTitle=X-axis label
yTitle=Y-axis label
grid=yes|no # grid lines
axes=no|yes # additional X=0 and Y=0 axes 
xStep=x # x tick marks
yStep=y # y tick marks
xRange=fr:to # shows only the plot in the specified range
yRange=fr:to # shows only the plot in the specified range
scale=scale # is updated upon interactive rescaling
 
Properties of the geometrical elements (rectangle,ellipse and polygon) 
color=color. The color is a name or a hexadecimal rgb string, 
    e.g.  color=red or color=#ff0000rotate=angle_degrees (e.g. rotate=45 means 45 deg. counter-clockwise)
fillStyle=BDiagPattern|SolidPattern|HorPattern|VerPattern|CrossPattern|BDiagPattern|FDiagPattern|DiagCrossPattern
label=My label  # each semicolon or backslash inside the label 
  needs a preceding backslash, i.e. \;, \\ .
labelPos=center|left|right|top|bottom
 
Example
 
group table t {300. 200. 500.} "Volume" {390. 230. 630.} "Area" {5 3 1} "i"
x = "x=Volume;y=Area;color=i;size=8;;title=Volumes and areas;;"
y = "element=rectangle;x1=150;y1=200;x2=550;y2=550;color=blue;fillStyle=BDiagPattern;label=Drugs;labelPos=center"
make plot t x+y
Option output writes the plot as an image into file name provided. File extension defines the image type.
(Most popular extensions: png,jpg,pdf,eps)
With output option you may additionally specify the size of the output image.
 
Example:
 
 add column t Random(100,0.,1.) Random(100,0.,1.) Random(100,0.,1.)
 make plot t "x=A;y=B;color=C;size=6;style=dots;;" output="aaa.png" size = {500,500}
 unix display aaa.png   # display the plot using Linux 'display' program
Visualizing a matrix 
Element matrix=matrixName with additional arguments:
 
General properties are also applicable after two semi-colons: ( xTitle , yTitle , title )
Example:depth=legend=pos=step=rainbow= 
read pdb "1crn"
m = Matrix(a_/A a_/A ) # residue contact matrix
add header t m name='m'
make plot t "matrix=m;rainbow=white/yellow/green;depth=-1;legend=m;;xTitle=I;yTitle=J;title=Contacts of Crambin"
 
See also:
 
 | make reaction : applying reaction to the products | 
 
 
 make reaction reaction_R1R2 chem_R1 chem_R2 ..  [name=s_table | output=s_file] [filter=s_expression] [all | only ] [ keep ]
 
Takes one chemical reaction (the first element of a reaction array) and applies it to
the reactant arrays. All reactants suitable for this reaction will be combined to generate 
a chemical table .
The reaction drawing need to refer to replacement groups as R1 , R2 , for example:
 
Parray("[R1]C(=O)O.N[R2]>>[R1]C(=O)N[R2]" )
Note that here the dot . separates the reactants and the >> 
indicate the reaction.
Example:
m1 = Parray( { "C(C(=O)O)(=C(C=C1)N)C=C1SC#N" "C(=CC(=C(O)C1)C=CC=1)(C(=S)N)C(=O)O"\
   "N(=C(S1)N)C(C1=CC(C=C1)=CC=C1C(=O)O)=O" "C(C(=O)O)(C(=CC1)N)=CC=1N=C=S" } )
m2 = Parray( { "C(C(=O)O)(=C(C=C1)N)C=C1SC#N" "C(=CC(=C(O)C1)C=CC=1)(C(=S)N)C(=O)O"\
   "N(=C(S1)N)C(C1=CC(C=C1)=CC=C1C(=O)O)=O" "C(C(=O)O)(C(=CC1)N)=CC=1N=C=S" } )
make reaction Parray("[R1]C(=O)O.N[R2]>>[R1]C(=O)N[R2]" )  m1 m2
keep options preserves  SMARTS  search attributes in the result
 
all and only options allows one to handle multiple functional group mapping. The possibilities are:
 
default mode : skip compounds with multiple functional group matches
only option : take a first mapping
all : enumerate all possible mappings
 
You can apply a filter expression to the output of the reaction. The following functions can be used
in the filter:
 
MolWeight,Nof_Molecules,Nof_Chirals,Nof_RotB,Nof_HBA,Nof_HBD,Nof_Atoms,Nof_Frags,MolSynth,MolLogP,Volume,MolPSA,MoldHf,MolLogS
 
Example:
 
make reaction Parray("[R1]C(=O)O.N[R2]>>[R1]C(=O)N[R2]") m1 m2 filter="MolWeight(mol)<400 & MolLogP<6"
You can also apply condidtion to the matched functional groups. R1,R2,... 
Example:
 
react = Parray("[R1]C(C(=O)[R2])=O>>C1C(=C(C=CC=1)[R2])[R1]")
rct1 = Chemical( {"CC(C(C)=O)=O", "CC(C(c1ccccc1)=O)=O"} )
make reaction react rct1 filter = "R1==R2"
make reaction react rct1 filter = "R1!=R2"
Another example (provided as an example file):
 
read binary s_icmhome + "example_reaction1.icb"
make reaction r_han_pyr.rxn[1] name=Name( "T_react", unique ) reactant1.mol,reactant2.mol
 
The output. The output is generates as a table if the total number of products is less than 40,000.
For larger sets the command will automatically switch to the file mode.
 
Option name = s_table allows one to change the default name of the output table.
Option output = s_file forces the file output and suppressed the table creation.
 
 The output chemical table has the product column as well as a column for each of the R-groups. 
 
Dynamic filtering of the output by applying a filter expression.The filter= s_expression option allows one to apply a filter during the
library generation. The filter expression is a double-quoted string
with the following structure:
"Function1 relation value & or | 
        Function2 relation value & or | ..
"
 
Example: 
 
filter = "MolLogP<5. & Nof_Frags('C(O)=O')<1"
The list of functions is expanding. The current list of the functions is here
 
 
Splitting the library by the scaffold into the replacement group arrays.A library can be also reduced back to the scaffold and replacement groups using the split group scaffold library 
command.  E.g. split group scaffld.mol combilib.mol
 
See also: enumerate library , Split chemical , Replace chemical .
 
 
 | make sequences from alignment | 
 
 
 make sequence ali_range  
 take a vertical block from an alignment and convert it into a separate 
alignment with independent truncated sequences.
 
read alignment s_icmhome+"sh3"
make sequence sh3[20:50]
See also: 
 
 | make sequence: extract from pdb or icm structure | 
 
 
 make sequence  ms   [name={s_name | S_names}] [resolution] 
 creates sequences (or, more strictly speaking, ICM-shell objects of the 'sequence' type)  
of residues composing selected molecules  ms_ .  
One-letter equivalents of full residue names are specified in the icm.res library.  
Option resolution adds the X-ray resolution value multiplied by 10 to the name 
(e.g. 2ins_a25 for resolution of 2.5A) or 'No' for NMR and theoretical structures.  
The group sequence command will automatically prefer a sequence from 
structure with better resolution. 
The resolution is not appended if option name= is specified.
 The make sequence command also extracts both the secondary structure  
and the site information.
 See also: read pdb sequence
 Examples:
 
 read pdb "2ins" 
 make sequence a_2ins.a,b        # two seqs 2ins_a and 2ins_b created  
 make sequence a_2ins.a,b resolution # resolution*10 added to the name 
 make sequence a_1.1 name="aa" # sequence named: aa 
 make sequence a_2ins.a,b name={"aa","bb"} # seqs named: aa and bb 
 
 
 
 make sequence nSeq [ lenMin [ lenMax ] ] [name= s_nameRoot ('sq') ]
 
generates nSeq random sequences with length randing from lenMin to lenMaxExamples:
 
make sequence 10 # makes sq1,sq2,.. 
make sequence 10 name='seq' # seq1,seq2
make sequence 10 40 # 10 sequences with len=40aa
make sequence 10 40 50 # 10 sequences with len=40 to 50aa
 
 
 
 make tree table [tree_type] [tree_name] [options]
 
this command builds a hierarchical data tree of the table rows and stores in the table header.
as a tree.cluster parray.  
A simple example is given below:
 
read table "t.tab" name="t"
make tree t
 
Defining the tree construction type. 
The main modes are the following:
 
a complete tree requiring N2 comparisons. It is preferable for tables smaller
than a thousand records. For larger tables both performance and memory requirements 
become prohibitive.  This mode will be used by default for up to 2000 rows. 
To force this mode use keyword full, i, or the method name.
a K-means clustering requiring N*K comparisons. 
To activate this mode the number of clusters i_Kclusters needs to be specified. 
This method is both much faster and does not require a pre-existing NxN distance matrix. 
 
For a small number of rows ( N under two thousands) 
ICM performs data clustering based on N by N comparison between the table rows.
This method can be enforced for larger tables with the full option (e.g. make tree t full) 
or using the distance = s_distMatrixName . In the latter case the matrix needs to be appended to the
table header:
 
read table "t.tab" name="t"       # N rows
make tree t full                  # all distances between rows are calculated 
# or
read matrix "dist.mat" name="dm"  # N x N matrix
group table t append header dm 
make tree t distance = "dm"       # uses external distance matrix for clustering
 
The type ( tree_type ) of the cluster tree construction algorithm can also be explicitly defined. 
This type defines how two distances from two neighboring branches are replaced with one distance.
By default the "upgma" method is used.
 
"upgma" (the default) unweighted pair group method using averages, 
i.e. each record has the same weight, and therefore, the distance to each branch 
is weighted by the branch size:  d12=(N1*d1+N2*d2)/(N1+N2) .
"single" or "min" single linkage, if two branches with d1 and d2 are merged, the distance is replaced with the minimal distance:  d12=Min(d1,d2) .
"complete" or "max" , e.g. d12=Max(d1,d2) .
"wpgma" : average linkage tree, each branch has equal weight regardless of the number of members: d12=0.5*(d1+d2) .
 
If the number of rows N is large, ICM performs the K-means clustering by default. The K-means method can
also be enforced if the number of clusters is provided as an explicit integer argument, e.g.
 
make tree t 100 # enforces K-means with 100 seed clusters.
This method avoids a full comparison by creating K seeds and comparing all other records with the seeds. 
If neither full argument, nor the type string, nor the number of seeds for the K-means clustering is specified, 
the method of construction will be determined automatically on the basis of the number of rows. 
Defining the distance measure.  
The distances between rows can be  (1) provided externally in the table header 
(option distance=s_matrixName, see below ) 
(2) calculated dynamically as Tanimoto distances between chemical fingerprints for chemical tables;
(3) calculated dynamically as weighted cartesian distances (options column= S_listOfColumns 
and heavy= R_listOfColumnWeights ).
The tree can further be used to assign a cluster number to each table row at 
a certain distance threshold ( the separator= and the split= options ).
 
For common tables, by default all numerical tables are used with the same weight.
For chemical tables, by default only the chemical array is used for distance calculations.
However, option all will enforce concurrent use of the chemical distances and all numerical columns.
Options column= and heavy= give a specific selection of columns and their respective weight.
 
 
all add all numerical columns to the chemical information in distance calculation
column= S_listOfColumns numerical column used for clustering
distance= s_distMatrixNameFromTableHeader . 
The matching distance matrix must be already attached 
to the table with the group table table header matrix s_distMatrixFromTableHeaderName .
This only belongs to the full tree mode.
exact suppressed auto-normalization fo columns in calculating cartesian distances during clustering 
heavy= R_distColumnWeights numerical column weights corresponding to the column= column names
label= s_labelFormat (e.g. label= "%COMPOUND_NAME")
matrix  add the newly formed distance matrix to the header of the table (the default name is "dimt").This only belongs to the full tree mode.
name= s_treeName defines the name of the tab associated with this tree (the same table can have several
associated trees)
select= I_rowNumbers (e.g. select=Count(10,30)  this option allows one to create a tree from a subset of
 rows, e.g. from 10 to 30.
separator= r_threshold_Dist . The minimal distance value at which elements or clusters
   are considered to belong to the same group. 
sort= s_orderColName  additional ordering of the branches by a table column with preservation 
  of the clusters ( sort="A" ). It is possible because left and right is normally undefined.
  If the s_orderColName is specified, the left and right will be determined by this column values.
split= s_colname : re-calculate the cluster numbers at a different threshold value (a.k.a. separator). s_colname is the name of a column in which the new cluster number is stored, the "splitting"
is done according to the separator value. This split level can be reset with the split tree command,
and the column name can be returned with the Name( table.cluster i_cluster split ) function.
 
The output. 
The tree is added/appended to the table.cluster parray. 
i_out returns the position index in table.cluster .
a new column is added to the table with the order number of records in the tree. This column
 can be used to sort the table rows in the tree order. The name of this column can be 
 found with the Name( table.cluster i_cluster index ) function.
another column containing the cluster number at the split level is added if the split argument is used (see above).
 
Example:
 
read table mol s_icmhome+"/moledit/Dictionary.sdf"
make tree Dictionary
See also: 
 
 make tree ali_name [ s_epsFile ]  
 reconstruct the evolutionary tree from the specified sequence alignment 
using the neighbor-joining method (  Saitou and Nei, 1987).   
Create a PostScript image of this tree which will be saved in the 
ali_name.eps file.  
See also: the align command.
 Examples:
  
 read alignment msf s_icmhome+"azurins" # read alignment  
 make tree azurins              # draw evolutionary tree  
 
 make tree M_squareDistanceMatrix[1:n,1:n] [ S_objectNames[1:n] ]  [ s_epsFile]
 reconstruct the evolutionary tree for arbitrary objects from the 
matrix of pairwise distances. The names of 
individual objects may be provided in a string array for a nicer PostScript 
picture. This command is cool.
 See also:
 Examples:
  
 read matrix s_icmhome+"dist"            # read a distance matrix [n,n]  
 make tree dist 
 unix gs dist.eps 
 
 
 
 
 make tree object M_dist_nxn [S_names_n] [name=s_objName] [angle=(90:180)] [torsion=(0:180)] [simple] [size=r_distScale]
 
  makes a 2D (option simple ) or 3D tree and sets an integer field named 'index' with
the index value to each atom (see set field and Field( as s_fieldName ) )
 
This example shows how to start from a table and make an active tree (nodes respond to doubleClick) :
 
read table mol s_icmhome + "FUNCGROUPS.sdf" name="t"
make tree object Distance( t.mol ) name = "tree"  # sets "index" field for leaf atoms
# set or re-set labels
set label atom a_//c* Sarray(t.NAME_ [ Field( a_//c* "index" ) ])
# set ball radius and colors
set atom ball a_//c* t.clogP [ Field( a_//c* "index" ) ]
color ball a_//c*  t.tPSA [ Field( a_//c* "index" ) ]
# set double click property (e.g: to select an corresponding table row)
set field a_//c* name="doubleClick" "find table t select index=Field( $1 'index')"
 
 | make unique: reorder atoms in a unique order. | 
 Example:
  
read mol s_icmhome+"ex_mol" 
make unique 
# 
build hydrogen 
set type mmff 
convert 
Smiles(a_)  # unique smiles string 
 
 
 
 [ Minimize cartesian | Minimize loop | Minimize stack | Minimize tether ]minimize [vs] [i_mncalls] [s_terms] [selftether=as]  [as_1 [as_2]] \n\ 
  minimize cartesian|mmff [type] [charge] .. \n\
 
  minimize stack [selftether] .. \n\
 
  minimize tether [disulfide] .. \n\
 
 minimize locally the sum of currently active, or specified, terms  of the 
energy/penalty function with respect to variables specified by vs_, 
or all the free variables, if variable selection is skipped.
 Optional arguments:
 
stack : 
If option stack is specified, the procedure extracts each stack conformation, 
minimizes it and replace the stack conformation with the optimized ones. 
The stack can be generated with the montecarlo procedure, manually created 
with the store conf command, or read from a stack file. 
This command allows one to refine your set of alternative conformations all at once. 
 i_mncalls :  
defines the maximal number of iterations. The minimization procedure can terminate 
earlier if the gradient becomes lower than the tolGrad parameter. 
If i_mncalls is not provided, the default parameter mncalls defines the maximal number of function evaluations during the minimization.
 vs_ : 
variable selection 
If  selection of variables vs_ selection is specified, the object will be 
refixed but the initial fixation will be restored after minimization.
 s_termString : 
redefines the set of terms used in the minimization dynamically  (e.g. minimize "tz" ). 
You may check the active terms with the show terms command, or 
change them before the minimization with the set terms ".." command. 
By the way, the active terms can be shown as a part of your command line prompt if you add  
 the %e specification to s_icmPrompt variable (like s_icmPrompt="icm/%o/%e> " ).
 selftether= as_ : 
if term "ts" (tether to self) is active, you can select a subset of atoms to be tethered
 
atom pair filter: 
By default all the atoms and all the atom pairs within distance thresholds vwCutoff and hbCutoff  
are involved in the calculation.  
However, two explicit atom selections [ as_1 [ as_2 ]] may  
impose a mask on atom pairs involved in the calculation of the pairwise energy or penalty terms.  
The default for the skipped as_1 is all the atoms. 
If only the as_1 is specified, the as_2 is assumed to be all atoms.   
Using atom selections is dangerous and is not recommended since there are many 
combinations which do not make sense and give unpredictable results. 
 the algorithm: the minimizeMethod preference.  
The type of algorithm (conjugate gradient, quasi Newton, or 
automatic switching between the two) is defined by the minimizeMethod preference.  
The progress bar will show you the progress of the procedure.  
If minimizeMethod="auto", the progress bar of the minimization procedure will show  
the 'C' character in a row of dots and colons when the quasi-Newton method switches  
to the conjugate gradient method.
 Dots show progression of the minimization procedure, while colons mark recalculations of neighbor lists.  
The lists are updated if at least one of the atoms deviates from its previous position by more than 1.5 A.  
Both basic methods use the analytical derivatives of the terms with respect to free internal variables.
 the exit criteria, and interaction lists.  The procedure is terminated upon any of these conditions become true:
 
mncalls : the maximal number of function evaluations (`mncalls) is reached. 
tolGrad :  if the gradient falls below the tolGrad parameter. 
tolFunc :  if all of 6 consecutive steps do not improve the function beyond the tolFunc parameter. 
minNumGrad condition : this is a condition when the numerical gradient evaluated from the energy function 
 values differs too much from analytical gradient. It is usually the case when the minimum is essentially reached, but
 the atoms bumped into each other and the slope is steep ( R^12). 
 Naturally, if the function has a strong non-harmonic behavior (e.g. a packed protein) and the numerical gradient does not match the analytical one. This is not necessarily bad, just means that you reached a packed state. 
 If you rerun the minimizer, it may go in a different direction and may improve the function a little more.
 
Suppressing updates of the interaction lists upon atom movements during the minimization. Sometimes during the course of minimization the interaction lists are recalculated. 
When some atoms fall out or in the vwCutoff sphere , the value of the gradient and even the energy function
can jump. For that reason do not be surprised that the exit gradient differs from the one reported in the previous
 step output.  To influence the lists you have two main mechanisms:
 
Example:suppress list updates all together with l_updateLists = no . In this case, if you need to recompute the lists,
  use the delete list command.
make the updates less frequence by increasing the listUpdateThreshold parameter.
 
read object s_icmhome+"crn"
l_updateLists= no
minimize 
show energy # still uses the same lists
delete list
show energy # makes new lists
l_updateLists= yes
listUpdateThreshold=2.
minimize
 the output l_showMinSteps flag and i_out :  The actual number of function evaluations during minimization is saved in the i_out variable. 
The l_showMinSteps flag allows one to see every iteration of the minimization procedure. 
To speed up the procedure you may switch off the l_minRedraw flag to suppress redrawing 
of the molecule for each new conformation.
 
The minimizer also returns a rarray R_out with the following values:
 
R_out[1] the return code as follows:
0 successful completion, 
1 mncalls expired 
2 tolGrad is reached 
3 tolFunc is reached
4 tolXdiffOK
5 minBadGrad
6 minimization was interrupted  
7 the minimizer is lost in high energy values
8 whatever you do, it goes uphill 
9 unknown failure 
R_out[2] the number of function calls spent on the minimization run
R_out[3] the norm of the gradient (rmsd) upon completion
 Examples:
  
 build IcmSequence("HHAS;TW")  # create object from "def.se" sequence file  
 minimize v_//xi*              # do not touch the backbone torsions  
 minimize                      # use all variables  
 minimize 500                  # run longer until number of calls is 500  
 
 | minimize cartesian: full conformational optimization | 
 
 
 minimize cartesian [simple] [stack] [type] [charge] [i_mncalls] [s_termString] [selftether=as_for_ts_term]
 minimize the mmff energy for a fully flexible molecule in the space of atomic cartesian coordinates with option simple, or in a full set of internal coordinates without the option. The full set of internal coordinates permits changing of all coordinates, bond lengths, and bond angles. 
Before running this command please make sure that the atomic types and charges are set  
and the mmff libraries are loaded.
 The i_mncalls and s_termString have the same meaning as in the previous command. 
Options:
  
simple: if option simple is specified, the procedure directly optimizes x,y,z of each atom without projecting to a full set of internal coordinates. 
stack : if option stack is specified, the procedure extracts  
  each stack conformation, minimizes it and stores back to the stack. 
type : if option type is specified the set type mmff command is executed and mmff atoms are assigned. 
charge : if option charge is specified the set charge mmff command is executed and mmff partial charges are assigned 
i_mncalls : redefines the maximal number of minimization iterations ( mncalls ) 
s_termString : allows one to dynamically redefine the default energy terms. 
selftether= as_for_ts_term : if term "ts" (tether to self) is active, you can select a subset of atoms to be tethered
 Example:
  
 build string "se nter his cooh"   
 display   
 set term "ts" # tether to the initial set of coordinates 
 minimize cartesian type charge selftether=a_//ca,c,n
 The  drop and tolGrad minimization parameters will still apply.
 
 
 | minimize loop after build model | 
 minimize loop i_loopNumber
 to use this command you must run the build model command first.  
The build model command may not be able to find a perfectly 
matching loop. Two sorts of problems may appear: the imperfections of the 
loop attachments and the clashes of the loop to the body of the model.
 The minimize loop command optimizes the covalent geometry at the junctions 
and the clashes through an interactive procedure which maintains the loop closure.
 The energy function used by the command is not as detailed as the full atom 
energy. It is advisable to perform a regularization (e.g. regul a_ )  
and full atom refinement.
 To save all the graphical frames during this minimization set the 
 autoSavePeriod variable to the special value of 99 . In this case 
png image files named f_x_y.png , where x is the loop number and y is 
the frame number, will be saved in the current working directory.
 
 
 | minimize stack: minimize each stack conformation | 
 minimize stack [s_terms] [mncalls]
 execute these steps:
  
As a result, both the geometries and the energies are updated with 
the optimized ones. Example:load each stack conformation  
locally minimize it  
store each conformation back to the stack 
  
read stack "a" 
minimize stack 400  
 One can achieve the same result with a shell script like this:
  
read stack "a" 
for i=1,Nof(conf) 
  load conf i 
  minimize 400 
  store conf i 
endfor 
 
 
 | minimize tether: threading a model with idealized geometry through a pdb-structure | 
 minimize tether [vs]
 regularization procedure. It creates a conformation (i.e. determines free variables)  
that minimizes distances between atoms and their tethering points.  
If initial model was built from standard amino-acids with idealized covalent geometry , 
this procedure will create a model with standard bonds and angles which fits the best 
to the target set of atom coordinates.  
The tethers may be imposed by the set tether command.  
An integer variable minTetherWindow defines the maximal number of preceding torsions  
which are locally minimized to best-fit the pdb-model. 
Optional variable selection vs_ allows one to perform fitting only for the selected  
fragment of the model.   
This may be convenient if you want to re-fit only a local fragment. 
Variable r_out contains the RMS deviation between the template and the model.
 
Assigning ring conformation from a template 
To assign ring conformation from a template one can use the minimize tether command.
The chemical equivalences can be found and tethers imposed with the find molecule sstructure all tether command.
The following example illustrates the principle.
 
read object "template.ob" name="template"  # contains ring template
build smiles "C1CCCCC1"  # some ring
find molecule sstructure all tether a_template.  a_target.  # make sure tethers exist
set object a_target.
unfix V_//r*,f*  
minimize tether
minimize cartesian "mmff,ts" selftether=a_//!h*
display a_template,target. center
 
 
 a tool for making clickable strings in the graphics window.
 menu [i_string1 i_string2 ... ]
 this command declares the listed string labels as active and 
returns the chosen string number in 
 i_out . 
If no arguments are specified, only the last string will be "clickable". 
See also _demo_main file.
 Examples:
  
 while(yes) 
 display string "Menu" 
 display string "Fish"    -0.7, 0.6   yellow # 2 
 display string "Pork"    -0.7, 0.5   yellow # 3 
 display string "Pasta"   -0.7, 0.4   yellow # 4 
 display string "Quit"    -0.7, 0.3   yellow # 5 
 menu 2 3 4 5 
 choice=i_out 
 delete label 
 if    (choice == 2) then 
   display "Good choice.\n Our fish is the best.\nClick here" 
   menu 
   delete label 
 elseif(choice == 3) then 
   display "Good choice.\n Our pork is the best.\nClick here" 
   menu 
   delete label 
 elseif(choice == 4) then 
   display "Good choice.\n Our pasta is the best.\nClick here" 
   menu 
   delete label 
 elseif(choice == 5) then 
   quit 
 endif 
 endwhile 
 
 
 
 
modify chemical structure of a molecule by replacing one part with 
a specified group or "residue" from icm.res or user residue library. 
Prerequisites: 
  
modify works only for ICM objects. convert your object to ICM type if necessary 
modify deletes the atoms which need to be replaced, so you do not need to delete them explicitly 
 modify atom with a library group
 modify  as_exitAtom s_graft_branch
 replace the branch starting from the specified atom by another library substituent.  
Suitable for standard biochemical modifications, such as glycosylation, phosphorylation, 
etc.  (Note that to myristoylate N-terminus you need to use "myr" as N-terminal residue, 
i.e.  build string "se myr ala ala coo-" ).
 Examples:
 
 LIBRARY.res = LIBRARY.res // "usr"        # Use usr.res in s_icmhome in addition to icm.res 
 read library residue                      # Re-Read the library with additional residues
 read object s_icmhome+"crn" 
 display a_/8:13 
 color red a_/11                           # serine 
                                           # O-glycosylation ("bnag", "bgal", "bglc", "bman" "aman" "afuc") 
                                           # hint type Table(residue) to see available sugars
 modify  a_crn.m/11/og "bnag"              #  beta-D-N-acetylglucosaminide 
 # Or
 build string "se ser thr tyr asp lys his" 
 modify a_/ser/og  "po4"                   # Phosphorylation
 modify a_/thr/og1 "po4" 
 modify a_/tyr/oh  "po4" 
 modify a_/asp/od2 "po4" 
 modify a_/lys/hz2 "po4" 
 modify a_/his/hd1 "po4" 
See also: LIBRARY.res
 modify: single or multiple residue mutations  modify  rs  s_NewResidueName
 
replace selected residue(s)   rs_ by another residue s_NewResidueName.  
The backbone conformation is not changed, unless the new residue is "pro" and the phi angle 
is outside [-90.,-30.] range. 
 You can replace amino acids (the usual list of three letter codes),  
as well as nucleotides: "ra" "rg" "rc" "ru" for RNA and 
 "da" "dg" "dc" "dt" for DNA.
 
Examples:
  
# Peptides and proteins 
# 
 read object s_icmhome+"crn"
 modify a_/15,18 "his"          # substitute residue 15 and 18 with histidines  
 modify a_/thr "val"            # substitute all alanines with valines   
# 
# DNA or RNA 
# 
 read pdb "4tna" 
 convert 
 modify a_/66 "dg"        # substitute nucleotide 66 by Uracyl  
 
Modifying the 1st residue in a polypeptide 
The first residues has an unusual N-terminus therefore there is a special trick to mutate it to another residue.
Essentially the grafting principle (see below) needs to be used.
Example in which we are modifying 1st residue of the first object:
 
build string "HWT" name="x"; align number a_/* 0 # our main object
#
build string "ACDEFGHIKLMNPQRSTVWY"  name="allres"  # the source of replacement groups
modify a_1./his/cb  a_allres./arg/cb   # modifies the side chain only
 modify by grafting parts of objects  modify  as_atom1 as_atom2
 replace a fragment of the molecular tree in an ICM-object  
starting from a specified single atom as_atom1 (e.g. a_/15/cg) by a subtree starting from 
another single atom as_atom2. This subtree is simply copied and not 
altered in any way. It is recommended to perform molecular building 
operation interactively and with your molecule displayed in the graphics 
window. Type  modify and Ctrl-click the atom starting the branch 
to be replaced and then the atom starting the branch to be grafted. 
It does not matter where you take the modification group from. It may be 
the same molecule, a group in another object, etc. You may want to load 
a residue containing the group of interest directly from the icm.res 
residue library by doing.
 
Note: consider using macro modifyGroupSmiles as_replacement_atom s_chemsmiles 
 to avoid side effects of the straight modify command. 
This macro makes sure that your branch does not start from the first atom and minimizes the connection afterwards.
 Examples:
  
 show residue types     # find out what residues are available  
 build string "se myr"  # create a new object with myristoyl group.  
 After the modification you can remove objects (such as  "myr" 
in the above example) used for construction. Be careful if modifying atoms 
within  ring systems; the results may not always be obvious unless you know 
how the ICM-tree is constructed (you'll be kindly warned anyway). 
However, the whole ring can be modified or grafted without any difficulty.
 Examples:
            
 build string IcmSequence("MIPEAY")  # build a molecule  
 display                             # display it to click two atoms and watch 
 
 modify a_/1/ce a_/1/ha              # replace methyl group of Met-1 by a hydrogen  
 modify a_/2/hd13 a_/2/cg2           # methylate hd13 hydrogen of Ile  
 modify a_/3/hg1 a_/6/oh             # turn proline into hydroxyproline  
See also: chemical modification of chemical arrays
 
 
 | Circular permutation of x,y,z coordinates and cell parameters | 
 
 
 modify rotate [os_nonICM] [i_n_perm(1)] [only]
 
performs one or two (if i_n_perm  is 2) circular permutation of Cartesian coordinates of atoms and unit cell parameters
a,b,c and alpha,beta,gamma parameters of the unit cell.
 Option  only suppresses the cell parameter permutation.and only does x,y,z.
This command has been developed to fix problems with incorrect (nonstandard) definitions for C121 space group. 
Normally the second angle (beta) is supposed to be non-90 (is the case for 6000 PDBs with C121 groups), while in the following list
 
 7acn 8acn 1aco 1ami 1amj 1b0j 1b0k 1fgh 1gra 1grb 1gre 4gr1 1grf 4grt 1grg 5grt 1grh 2grt 1grt 3grs
 3grt 1lh1 1lh2 1lh3 1lh5 1lh6 1lh7 2lh1 2lh2 2lh3 2lh5 2lh6 2lh7 1nis 1nit
the third angle (gamma) is non-90. 
Example:
 
read pdb "1gra"
findSymNeighbors a_ 7. no 2 yes yes    # there is a problem with symm generated objects
#
delete all
read pdb "1gra"
modify rotate
findSymNeighbors a_ 7. no 2 yes yes    # problem solved
 
 
 
 [ Chemical Find and Replace | Modify chem charge | Modify chem delete salt | Modify chem normalize | Modify molcart ] 
find and replace a chemical pattern, normalize/standardize a chemical, delete salts
The following types of chemical modifications can be performed on an array of chemicals:
 
 | Chemical Find and Replace | 
 
 
 modify chemarray s_find_smart s_replacement_smart [exact] [ index= I_indices ]
 
find a chemical pattern and performs a global replace to s_replacement_smart for all chemicals in an array.
The replacement can be done only if both the find and replace patterns contain the same marks R1,R2.. 
A connecting atom in the pattern can be either an undefined atom, e.g. [R1]  or a defined atom, e.g. [C;R1]These marks are used to find corresponding atoms in the replacement pattern. 
 
Hints for the Chemical Editor: use the following shortkeys:
 
to mark atoms as R1 point your cursor at the connection atom and press 1 
to retain the identity of the attachment atom, (e.g. [C;R1] ) use Ctrl-1 .. 
to undo the R1 mark, label it as N,C,or O;  press Ctrl-0 for [C;R1] .
 
E.g:
 
read table mol s_icmhome+"/moledit/Dictionary.sdf"
modify Dictionary.mol "[R1]CC(=O)O" "[R1]CC(=O)OC"
Option exact modifies atoms in place and requires that the number of atoms is preserved. 
 | Charge or uncharge functional groups in compounds | 
 
 
 modify chemarray s_find_smart s_replacement_smart [exact] [ index= I_indices ]
 
 searches for a chemical group and replaces it by a group with a different charge.
Add  index= I_idx if you want to apply the operation to a selection.
 
Carboxylic_Acids  
 modify chem  "CC(=O)[O;D1]" "CC(=O)[O-]" exact  # to charge
 
 modify chem "CC(=O)[O-;D1]" "CC(=O)[O]" exact # to uncharge
 
Primary_Aliphatic_Amines  
 modify chem  "[C;^3][N;D1]" "C[N+]" exact # to charge
 
 modify chem "[C;^3][N+;D1]" "C[N]" exact # to uncharge
 
 
Secondary_Aliphatic_Amines  
 modify chem  "[C;^3][N;D2][C;^3]" "C[N+]C" exact # to charge
 
 modify chem "[C;^3][N+;D2][C;^3]" "C[N]C" exact # to uncharge
 
Tertiary_Aliphatic_Amines  
 modify chem  "[C;^3][N;D3]([C;^3])[C;^3]" "C[N+](C)C" exact   # to charge
 
 modify chem "[C;^3][N+;D3]([C;^3])[C;^3]" "C[N](C)C" exact  # to uncharge
 
Amidinium/Guanidinium  
 modify chem  "[N;D1]C=[N;D1]" "NC=[N+]" exact # to charge
 
 modify chem "[N;D1]C=[N+;D1]" "NC=[N]" exact # to uncharge
 
#
 
 | Chemical Find and Replace | 
 
 
 modify chemarray {delete|split} salt[ = chemarrayWithSalts [add] ] [simple]
 
Removes salts using dictionary file $ICMHOME/SALTDICT.sdf. 
Since salts may contain multiple instances of the drug (e.g. Drug.Ca.Drug ) additional cleaning may be needed
Option simple just considers will just leave only the first molecule.
 
Example:
 
add column t Chemical("CCC.CCC.O.NN" )
modify t.mol delete salt  # uses default salt dictionary
modify t.mol delete salt simple  # removes remaining duplicates
New or additional salt patterns can be provided with salt=. 
Example:
 
add column t Chemical("CCC.CCC.O.NN" )
modify chemical t.mol delete salt=Chemical({"O","NN"})  # treats both 'NN' and 'O' as salt
with add option both default and used provided dictionary will be used.
 
split option created two new columns in the original table 'salt_smiles' and 'salt_names' with dot separated smiles and names for removed salt.
 
simple option toggles mode which retains only the largest molecule and deletes all smaller molecules.
Example:
 
c = Parray( {"CC=O.O"})  # has an extraowater, O
modify c delete salt
 Info> 1 replacements done
show c
 CC=O
 
 
 | Standard representation of chemical groups | 
 
 
 modify chem_array auto
 
applies a set of chemical normalization rules described in the CHEMNORMRULES.tab in the $ICMHOME directory .
Feel free to add rules to this table or replace it with your own table. 
Currently it has the following rules:
 
"*-[N+](=O)[O-]"         "*-N(=O)=O"          "Nitro"
"*-N([OH])[OH]"          "*-N(=O)=O"          "Nitro"
"*-N(=O)[OH]"            "*-N(=O)=O"          "Nitro"    # Sulfonyl
"S(=O)([OH])(-*)(-*)"    "S(=O)(=O)(-*)(-*)"  "Sulfonyl" # Azide
"*-[N-]-[N+]#N"          "*-N=[N+]=[N-]"      "Azide"    # Diazo
"[C-]-[N+]#N"            "C=[N+]=[N-]"        "Diazo"
The asterisk marks "any atom".  Note that if the pattern does not contain connection labels [R1], or  [C;R1] , the atoms will not be considered as terminanted. 
A more general syntax is described in the 
 chemical find and replace command. 
 
See also:
 
file CHEMNORMRULES.tab in the ICM home directory
 
 | Update database table from ICM table | 
 
 
 
 
 modify molcart T [all] [column=S_columns] [table=s_table_name] [ connection_options ]
 
Modifies entries in a database table based on changes made in an ICM table. 
The load molcart, find molcart and query molcart create ICM tables containing subsets of database tables.
In most cases the database table has an integer primary key (ID) column, with unique values for each row.
The primary keys may be used to mark certain rows in the ICM table to request update or deletion of the corresponding 
entries in the database. ICM GUI provides tools to mark rows.
 
The all option tells the command to treat all rows as marked for update.
Only a subset of the ICM table columns may be updated in the database by specifying S_columns. 
The connection may be specified using  connection_options . Database table is specified
Otherwise connection and table information may be obtained from the input table header as in the load molcart command.
 
See also: molcart.
 
 
 [ montecarlo-fast ] | a generic command to sample conformational space of a molecule with 
the ICM global optimization procedure. 
 montecarlo [ OPTIONS ] [ vs_MC [ vs_minimize ] ] [ local rs_loop ] 
 runs Monte Carlo simulation for specified variables vs_MC, 
with local minimization with respect to the vs_minimize variables 
following after each random move.
 |   | 
 
 | Each iteration of the procedure consists of  
a random move of one of 4 types; 
   
local energy minimization; 
calculation of the complete energy potentially including surface and advanced 
electrostatics terms ( 
  REBEL or 
  MIMEL); 
acceptance or rejection of this iteration based on the 
energy and the temperature. 
 |   | 
 Three possibilities for variable 
selections arguments:
 
 OPTIONS: append
 appends to the existing conformational  stack (overwrites by default).
 chiral
 temporarily activates the l_racemicMC variable
 
 
tautomer  
toggles tautomer sampling. (`build-tautomer needs to be called before)
 
fast :   rapid side-chain optimization.  
This option allows one to accelerate the calculation by minimizing 
only a subset of the strained variables 
(as opposed to all minimization variables) after each step. 
The strain is established on the basis of the norm of the energy gradient
after a random move. The strained variables are temporarily unfixed and
this set of variables may be different every time.
This option needs the selectMinGrad parameter to be set to about 1.5 (a
threshold for the derivative norm).  
If this value is too low too many variables will be free and the procedure will
be comparable with the default (non-fast) mode, if the parameter is too high
the procedure may not be able to find the low energy conformations because
the environment will not respond to the changes properly.
Example:
  
 build string "se ala his trp glu" 
 selectMinGrad=1.5 
 set vrestraint a_/* 
 montecarlo fast v_//x* 
This mode is useful for side chain optimization in homology modeling. 
bfactor :   you can use the bfactor option to sample 'hot' parts of structure with higher probabilities. 
The relative frequencies are taken from the b-factors of the atoms 
belonging to the mc-variables.  Example:
  
 build string "se ala his trp glu"  # default b-factor=20 
 set bfactor a_/2  1000.     # make 2nd his hot 
 montecarlo bfactor 
To preserve the old bfactors, save them before the simulation and 
restore after. E.g.  
 b_old = Bfactor(a_//*)   # save 
 .. 
 set bfactor a_/10:20 200. 
 montecarlo bfactor 
 .. 
 set bfactor a_//* b_old  # restore 
 local
 local [ dash ] [ a_/residueRange1,residueRange2... ]
 ( this option is specified after the main  variable selections [ vs_MC [ vs_minimize ] ] )  
option local makes local deformation type movement for specified regions 
(e.g. two loops a_/15:22,41:55). Sub-option dash chooses 
angles for random deformation symmetrically with respect to the loop 
center. 
  Note, that to avoid movements of the flanking regions around the loop, 
you need to set tethers for those regions. The local deformation 
only applies to the initial random move, but the subsequence local energy minimization 
may move the flaking areas (in particular to the C-terminus side) away from 
their correct positions. 
  The simplest way to set the tethers for the flanking residues (40:45 in the example 
below) is the following:
  
copy a_ tether      # create a copy of your current object  
                    # and tether all atoms the original positions 
delete tether a_//h* | a_/40:45 
set terms "tz"      # add "tz" to the list of terms 
montecarlo v_/40:45 local a_/40:45 
mute
 suppresses the text output about each random move
 
 output
 shortens the output by printing out only the steps with the DY (down/yes) outcome. 
The steps in which any of the simulation limits is reached are also shown. 
This option may considerably shorten log files of very long simulations.
 
 r_exitEnergy  real argument determines if you want your procedure to exit upon 
achievement of equal or lower energy value . For example, if you know energy of the minimum, 
you may want to stop the search when this value is achieved. E.g.
  
 build string IcmSequence("AHWEND")   # hexapeptide  
 set vrestraint a_/* # BPMC-probability zones 
 montecarlo 10. # stop after energy of 10. is reached 
two atom selections: montecarlo .. as_1 as_2
 (this option is NOT recommended for beginners)  
Atom selection arguments [ as_select1 [ as_select2 ]]  
impose a filter on atom pairs considered in the terms of internal energy 
like "vw,el,hb,sf". There are three possibilities:
  
   
no selections - the whole object (all atoms) is considered (the default) 
  as_select - interactions of the specified atoms with ALL atoms 
in the object. 
  as_select1 as_select2 - interactions between two 
selections. For example, a_dom1 a_dom1 
would consider only the internal energy of the domain  dom1. 
 reverse
 this option makes a more intelligent random move  
in singlechain or a multichain molecule. By default if an 
angle is randomly changed near the beginning of a molecule,  
the second part of this chain moves.  
With the reverse the random move can occur in such a way  
that a part of the chain above a randomly chosen angle 
will stay the same, while the chain below the angle will move. 
Actually, the parts will be compared by molecular mass and  
the heavier part will be more likely to stay where it is than the lighter part.  
The probability that a part stays static is proportional  
to the number of atoms of this part. It is important that 
the virtual variables ( v_//?vt* are not fixed).
 This option is very useful in docking, since the receptor is static 
and the moving molecule should try to preserve the majority of 
current interactions. Also, the reverse option helps if one 
simulates the N-terminus of a multi-chain protein, or a docking of 
a peptide to a protein. 
Example:
  
 read pdb "1aya"  # read a complex 
 delete a_!1,2    # keep only SH2 domain and a peptide  
 convert          # make an ICM object with hydrogen 
 set vrestraint a_/*         # set prob. zones 
 montecarlo reverse v_2 v_2  # re-dock the peptide 
If you move the 1st molecule, do not forget to unfix the fvt1  
variables of all other molecules, e.g.  
 .. 
 unfix only v_1 | v_*//fvt1 
 montecarlo reverse  
If you always want to keep the C-terminus static and move the N-terminus, 
use the superimpose option (see below). 
 store
 
option store means that at the end of the simulation the stack is stored in
the current object (equivalent to the store stack object command ). This allows
to extract it later without reading it from a file. 
 
 
 
superimpose  as_3atoms_per_molecule  
 superimposes new generated conformations after every move.  Usually if you change 
backbone torsion at the N-terminus, the whole molecule moves. This option allows one to 
generate conformational changes at the N-terminal part of a peptide  
while its C-terminus occupies the same 
position in space.  
After each random move the first 3 atoms  
selected in molecule(s) will be superimposed on their initial position and the 6 
positional variables (v_//?vt*) will be updated accordingly.  
The setup:
  
  unselect the virtual variables from the MC selection (v_//!?vt*) 
  specify three or more atoms beyond the N-term. of interest for superposition 
  add virtual variables to the minimization selection (it is usually the default) 
to allow positional adjustments during minimization  
(the movements of C-terminus are suppressed only in the MC move, not in the following 
minimization). 
  if minimization is used (mncalls > 1), make a copy of the molecule and tether 
the C-terminus to it. 
 
trajectory   records all accepted conformations sequentially in a binary *.trj file. 
Later one can read trajectory, display trajectory, and operate 
with individual frames, e.g.
  
for i=1,Nof(frames) 
  load conf i       # to extract a frame 
  display skin white center 
  write image png "f"+i 
endfor 
 
 Example:
  
 mncalls = 1 # move N-term residues a_/1:5 and while keeping 
             # the rest in the same position 
 montecarlo v_//!?vt* superimpose a_/6/c,ca,o 
             # virtual variables should be available for minimization 
 montecarlo v_/1:3/!omg,?vt* superimpose a_/6/c,ca,o  
# Now a more realistic example 
 build string "se ala his trp ala ala ala ala" 
 display  
 display residue label 
 mncalls = 200 
 copy a_1. "original" 
 set tether a_/5:7 a_original./5:7 
 set terms "tz" 
 set vrestraint a_/* 
 mncallsMC=100000 
 montecarlo v_/1:4/!omg,?vt*  superimpose a_/5:7/ca 
The following ICM-shell variables and commands are important for the procedure.
  
mncallsMC, 
mncalls, 
temperature, 
tempCycle = {tempMax,tempMin,tempPeriod}, e.g. {1200.,600.,100000.}  for a cyclic temperature schedule
mcBell to make rs-zones narrower or wider than in icm.res file 
mcJump 
mcShake - the average amplitude of the pseudo-Brownian docking move 
mcStep - an amplitude of the unbiased step 
l_bpmc - if no, makes simple random steps (one angle by a random value)  
l_writeStartObjMC - if yes, write the starting object with its fixation and geometry to a file.  
mnvisits three limits and three actions follow 
visitsAction , 
mnhighEnergy , 
highEnergyAction , 
mnreject , 
rejectAction , 
vicinity , 
compare . 
betaStepPb - relative sampling of beta regions ( recommended value of 2.)
flipStepPb - 0.5
autoSavePeriod - set it to zero to supporess writing stacks after a certain number of iterations.
 EXPLANATION OF THE OUTPUT (below are 3 example lines with numbered fields):
 
  
1     2      3   4     5    6   7    8    9        10        11   12     13    14 
DY Visi    600  16   gln  xi3 70   -98   94   -322.04   -324.56   35   4.87 51559 
__ __      600  32   ile BPMC ipt  ipt  ipt   -324.56   -290.80   18  65.72 51577 
_Y Visi    600  16   gln BPMC qmm  qmt  qmm   -324.56   -323.93   41   3.78 51618 
  
The logic of stack operations is the following. 
There are three possible events for each slot of a stack: 
DY = Down Yes, i.e. energy has decreased after change and new conf. is accepted 
 
__ = up no , i.e. energy has increased and new conf. is not accepted 
 
_Y = up Yes, i.e. energy has increased, but new conf. is accepted 
 
stack operation code indicates the outcome of comparison of the current conformation with the stack. 
 
 Impr : the conformation is close to one in the stack and has a better energy. Visited and improved 
 New  : the conformation added as a new stack conformation 
 Sbst : not found, full stack, the worst is substituted for the current 
 Visi : visited and not improved 
 Vlm  : visited and not improved, repetition limit mnvisits is achieved 
 High : not found, worse than the worst stack structure 
 __   : NO in calling routine (has nothing to do with stack) 
 RLim : NO limit of sequential Rejections is reached (has nothing to do with stack) 
 VLim : NO Vlm  (number of visits > mnvisits) 
 HLim : NO High. mnHighEnergy limit is reached. 
current temperature in Kelvin; 
number of selected residue 
selected residue name 
name of randomly selected angle or BPMC to indicate the biased probability move 
internal coordinate value or name of the multidimensional zone before random change; 
internal coordinate value or name of the multidimensional zone after the random change but before minimization; 
internal coordinate value or name of the multidimensional zone after the minimization; 
energy before the random change; 
energy after the random change and subsequent minimization; 
number of function calls made during minimization; 
gradient RMS deviation ( normal completion is with low or zero gradient ); 
total number of function calls in the simulation. 
  
The starting conformation is placed to the first slot, 
if the stack is empty. At every simulation iteration, distances (either 
coordinate RMSD or angular RMSD, as defined by the 
 compare 
command) are calculated between the current conformation and all slots. 
If any of the distances is less than the 
 vicinity 
parameter, then the energies are compared and if the current conformation 
has the better energy, the stack conformation is replaced by the current 
one, otherwise the visit counter of the slot is incremented. If no similar 
structures are found, the conformation is appended to the stack, i.e. a 
new slot is created. If the stack is full, i.e. number of slots reached 
 mnconf 
parameter, then the worst-energy structure will be substituted by the 
current, provided the latter has lower energy. Otherwise, no action is 
taken and number_of_high_energy_conformation counter is incremented 
( see also mnhighEnergy).new slot creation 
energy improvement of the current slot conformational family 
replacement of the looser conformational family by a better energy 
conformation 
 Explanation of the last section of the output. Example:
  
 Info> 4 stack conformations saved to def.cnf [3 compressed] 
 Info> nSteps=     74, nTrials=      80, AcceptRatio= 0.92500, 
 Info> BestEnergy=    -6.01, Step     37; nCalls=    2009, eachMcVar =  1.88 
  
the diverse low-energy stack conformations are saved in a very compact file.   
The stack can be later loaded with the read stack, load conf 
commands. 
nSteps - the number of accepted moves 
nTrials - the number of generated random moves 
AcceptRatio - nStep/nTrials 
BestEnergy - the best energy found by the stochastic optimizer. 
nCalls - the total number of energy evaluations (each random move includes multiple energy evaluation 
performed by the local minimizer) 
eachMcVar - the average number of attempts to change each variable (if this number is less than one, 
the sampling may be insufficient, also read about convergence). 
 
 
 
 
 [ Move molecule | Move object | Move bonding | Move element | Move column | Move plane | Move sequence ]Move objects, molecules between objects. 
 | move ms_molecule: change tree topology | 
 move ms_moleculeToReconnect as_terminalAtom
 changes the topology of the basic ICM-tree by reconnecting the first 
 virtual 
bond of a specified molecule to a given atom. This allows you to move two 
molecules together as one rigid body. By default, all the 
molecules are connected to the origin [0,0,0] through virtual bonds. 
The molecule can be connected only to the terminal atom, usually 
a hydrogen. The molecule can not be connected to itself (naturally, do not 
even try it). This operation is defined only for ICM molecular objects.
 Examples:
  
 build IcmSequence("AAFF;DEG")  # two molecules connected by virtual bonds  
 display virtual                # to the origin  
 move a_2 a_1/3/hz              # graft the second molecule to a hydrogen  
                                # on another molecule  
                                # now the second molecule will move together  
                                # with the a_1/3/hz branch  
                                # if you change v_1//?vt* variables  
 | move : move multiple molecules between objects or merge two objects | 
 move  ms_MoleculesToMove  os_destination
 
 move  os_ObjectToMove     os_destination 
 move one, several or all selected molecules ( ms_MoleculesToMove or os_ObjectToMove)  
to the 
specified object os_destination. When all the molecules are moved 
from the source object, the empty object is deleted.  
The ms_MoleculesToMove molecule or object are appended to the end of 
the os_destination object and their  
 virtual torsion  tvt1 becomes virtual phase  fvt1. 
This command is used to 
create one object from several components.
 Examples:
  
 read object s_icmhome+"crn"   # 1st object          
 build string "se ala his leu" # 2nd object
 move a_2. a_1.                # take the 2nd obj and merge 
                               # it with the 1st one 
 # Or  
 read pdb "1sis" 
 read pdb "2eti" 
 set object a_1. 
 move a_2. a_1.     # two PDB structures became one 
                    # ICM molecular object 
 display virtual 
 | move several molecules into any molecule, auto-bond several molecules | 
 
 
 move ms_molecules_to_merge [ s_new_mol_name ] 
 
 move only ms_molecules_to_merge 
 
different molecules in a PDB object can be merged into a single molecule and correct intermolecular bonds can be formed with this command. 
This command also automatically 
bonds the closest atoms (if distance< 0.6(R1+R2) ) between the molecules being merged into a single molecules.
Helpful in dealing with PDBs with disconnected carbohydrates.
Options:
 
If new name is not provided, the name is taken from the first molecule.
only  - do not merge, just make bonds between the closest atoms
 
 
Example;
 
read pdb "1nxc" # three parts of hetero-mol need to be merged
move a_2,3,4 "glycan"   # they are merged and bonded now.
move a_1,2  only        # form a bond with the protein
 
 
 | move a table row or parray element | 
 
 
 move table[i_row] [i_newPos]
 
moves a row, e.g. t[2] to a new position. 
If the position is not specified the row is moved to the end. 
 
 move parray[i_pos] [i_newPos]
 
moves a parray element to a different position.
 
 
 
Example:
 
group table t {1 2 3}
move t[2] 1
 
 
 move table.column [ i_newPos ]
 
moves the column to a new position. If the position is not specified the column is moved to the last position.
Example:
 
add column t {1 2 3} {3 2 1}
move t.B 1
See also: add column, add column function
 
 
 
 
 move plane r_ofs [all|reverse]
 
command line interface to clipping planes
 
Arguments:
 
r_ofs - step size
reverse - move rear plane (if this option is omitted front plane will be moved)
all move both rear and front
 
Example:
 
read pdb "1crn"
cool
move plane -0.5
move plane -0.5
center
move plane 0.5 reverse
 
See also: View set view
 
 
 
 
 move ali seq [i_new_seq_pos]
 
move the sequence in an alignment to a new position. If the position is not specified, the sequence is moved to the last position.
Example:
 
read alignment s_icmhome+"sh3"
move sh3 Eps8 1
move sh3 Fyn
See also: Resorting alignment 
 
 
 [ debugger ]pause [ i_n_seconds | r_seconds ] [ s_message] suspends execution for specified number of seconds. A fraction of a second can also be specified, e.g. pause 0.01 If no argument is specified, the program will wait until RETURN is pressed.
 Examples (need an .ob file and a .cnf file):
  
 pause 0.1  # hundred milliseconds
 pause 5 "You have 5 secs"    # pause for 5 seconds  
 
 read object "x.ob"                 # How to analyze the conformational stack 
 read stack "x.cnf"
 display a_//ca,c,n                 # display backbone  
 for i=1,Nof(conf)                  # for all stack conformation  
   load conf i                      # load and redisplay each of them   
   pause "Press Return. N"+i        # gives you time to inspect the structure  
 endfor                             # go on to the next conformation  
 Debugging shell scripts
 The  
 pause 
command also can set the program into a debugger mode in which you will 
be prompted to confirm each command by pressing RETURN. In the debugger mode 
the  
 l_commands flag will be automatically set to  yes 
and restored upon quitting. 
This is how to do it:
  
 To start the debugger mode, add to your script: pause "START DEBUGGER" 
 To quit  the debugger mode, type or add to your script: pause "QUIT DEBUGGER" 
 
 
 create a PostScript file with a plot (for a built-in interactive plot use make plot, add output= s_file.pdf to save a pdf to a file ).
 plot { R_Xdata  R_Ydata |  M_XmultpleYdata } [ S_PointLabels ] [ S_PlotAxisTitles ] [ { R_4Tics | R_8Tics } ] [  s_epsFileName ] [ options]
 
  
Options.Simple input: 
Two compulsory arguments R_Xdata R_Ydata contain the X and Y 
coordinates. Both arrays may also be 
 integer arrays. 
 
Matrix input: 
allows you to specify several data sets. The M_XmultpleYdata matrix 
may contain either X,Y1,Y2,..Yn columns or just Y1,Y2,..Yn columns if 
option number is used. Matrix M[2,n] or M[n,2] is equivalent to the 
simple input R_Xdata R_Ydata (Note that function 
 Histogram( )  
returns such a matrix). Additional convenience: by default, different data 
sets will be shown in different colors and a panel with series/color correspondence 
will appear at the position specified by the 
 PLOT.seriesLabels 
preference (choose "none" to suppress the panel). 
To avoid ambiguity do not use explicit S_PointLabels with the matrix input. 
Example:
 # table t . It has columnds t.A and t.B add column t Random(1. 5. 20) name="A"
add column t Random(1. 5. 20) name="B"
# now let us make a matrix with one column containing the order number
m=Transpose(Matrix(Rarray(Count(Nof(t))))) # 1. to 20. column in a matrix
m=m//Transpose(t.A) # add column A from t
m=m//Transpose(t.B)
# add your functions of X here
plot m display
# or
plot m square display
Axis and Tics: 
8-array R_Tics[1:8] contains information about X and Y axis: 
 { Xfrom, Xto, XmajorTics, XminorTics, Yfrom, Yto, YmajorTics, YminorTics }. 
If only 4 numbers are provided, they are interpreted as { Xfrom, Xto, XmajorTics, XminorTics } 
while the Y axis tic marks are determined automatically. 
By default, if this argument is missing, the tic marks for both axes are calculated automatically. 
Example:
 
 x={1. 3. 4. 7. 11. 18.} 
 y=Sqrt(x) 
 plot x y {0.,30.,2.,4.}              # only X-axis marks are defined 
 plot x y {0.,30.,2.,4.,0.,10.,1.,5.} # both axes are explicitly defined 
Title and legends: 
string array S_PlotAxesTitles[1:3+NofSeries] contains { "Title", "X title", "Y title" } in the 
simplest case. If multiple series are plotted using M_XmultpleYdata or number M_multpleYdata 
arguments, each series may be named with additional components of the array:  
{ "Title", "X title", "Y title","Y1 title","Y2 title",..}. 
 
Plot controls:  
Optional S_PointLabels has the same number of elements as R_Xdata 
or R_Ydata and may contain either string to be displayed at the 
corresponding X Y point, or control information about marker type, color 
and size. The control string must start with underscore (_).  
To display both symbols and string labels, duplicate X and Y arrays 
(e.g. X//X, Y//Y) and supply the first S_PointLabel section with 
the symbol information and the second one with the string label information. 
 
Examples of string labels: 
 
 s={"1crn", "2ins", "1gpu", "3kgb","4fbr","6cia"}       # text labels: show as is  
 s={"_red SQUARE 0.4", "", "", "_green DIAMOND","",""}  # control labels 
 s={"_line" "" "" "_red line" "" "" "_blue line" "" ""} # control labels 
The empty string tells the program to inherit all the settings for the previous 
point. Individual components of the string label are (i) color, (ii) mark type 
and (iii) mark size. Omitted components are not changed. 
Allowed colors: ICM_colors from icm.clr file which one can show with show color command.
The Color ( R ) function will return a string array with suitable for plot color names mapped onto values.
Allowed mark types: 
 
line, cross, square, triangle, diamond, circle, star, dstar, bar, dot, 
SQUARE, TRIANGLE, DIAMOND, CIRCLE, STAR, DSTAR, BAR. 
 
Uppercase words indicate filled marks. 
  
 
append - append the plot to an existing plot file. 
 
display - view the created postscript file with an external viewer 
defined by the 
 s_psViewer 
variable. 
 
grid, or grid="x", or grid="y"  
- draw grid at the major tics for the specified axis. 
Default: for both axes ("xy"). 
 
exact - data points can reside exactly at a margin.  
 
regression - draw linear regression line. 
 
frame - draw NO frame around the plot (paradox isn't it? yeaah 
    we are tricky). 
 
origin - make origin at (0,0) point. 
 
link - enforce 1:1 aspect ratio, equivalent to  
 PLOT.Yratio = 1.0 . 
 
comment= S_xyXYtext -  
this option allows one to draw one line of text along all the four sides 
of the plot box. The string array may contain up to four strings {s_x,s_y,s_X,s_Y}: 
   
  This option may be used to draw amino acid sequence around a contact plot box or 
a dot plot box.  s_x: lower horizontal string, i.e. comment={"xxxxxxx"} 
    s_y: left vertical string, i.e. comment={"","yyy"} 
    s_X: upper horizontal string, i.e. comment={"","","XXXXXXX"} 
    s_Y: right vertical string, i.e. comment={"x","y","X","YYY"} 
  number generates the sequential numbering for  
X-array if this array is missing and sets a natural X tic style.  
In case of matrix input (see above) option number  
allows one to omit the X-array. 
 
 String variable s_epsFileName with extension  .eps 
defines the name of a PostScript file where the resulting plot 
is to be written to. The default of s_epsFileName is  "def.eps".
 Examples:
  
 x = Rarray(90,0.,360.)             # an array of angles with 4 deg. steps 
 plot x Sin(x) display 
 plot x//x Sin(x)//Cos(x) display   # quick and dirty way to have two data sets.  
 			              # Now let us get rid of the defect 
 s = Sarray(2*Nof(x))               # S_PointLabels for both arrays 
 s[Nof(x)+1] = "_red line"          # restart line for the first point 
                                    # of the second set 
 plot x//x Sin(x)//Cos(x) s display # much better 
 
 plot Transpose(x)//Transpose(Sin(x))//Transpose(Cos(x)) display 
  
 read object s_icmhome+"crn" 
 crn_m = Sequence(a_/A)             # a_/A ignores termini 
 plot comment=String(crn_m)+Sstructure(a_/A) number Turn(crn_m) display # try it 
 plot comment=String(crn_m)+Sstructure(a_/A) number Turn(crn_m) {"Turn prediction","Res","P"} 
 unix gs def.eps                    # to see it again 
See also: 
 make plot ,
 Histogram, 
 plotRama 
macro in the 
 _macro 
file, and examples in the  _demo_plot file.
 | plot area: show matrix values with color | 
 plot area M_XYdata options [ S_TitleXY ] [ { R_4Tics | R_8Tics } ] [ s_epsFileName ]
 plot 2D data from the matrix and mark values by color. Other arguments are the  
same as in the plot  command.  
Distribution of colors is controlled by the PLOT.rainbowStyle preference. 
By default the minimal and maximal values of matrix M_XYdata 
are used as extremes for coloring. 
Options:
  
color= R_2MinMax 
option allows you to enforce specific boundaries represented by the color range.  
For example, if you chose the "blue/red" PLOT.rainbowStyle 
the matrix value smaller than or equal to the first element of the R_MinMax array 
will be colored blue, while the matrix values larger than or equal to the second  
element of the array will be colored red, the middle values will be color with 
intermediate colors. The real array of boundaries contains two elements. 
 
 PLOT.rainbowStyle = "blue/white/red" 
 color={1. 3.}  # <= 1. are blue; above 3. red 
 color={3. 1.}  # >= 3. are blue; <= 1. are red 
link 
- enforce square shape (1:1 aspect ratio) of each cell, overrides  
 PLOT.Yratio. 
 
comment= S_xyXYtext  
 
this option allows one to draw one line of text along all the four sides 
of the plot box. The string array may contain up to four strings {s_x,s_y,s_X,s_Y}: 
  
 This option may be used to draw amino acid sequence around a contact plot box or 
a dot plot box.  s_x: lower horizontal string, i.e. comment={"xxxxxxx"} 
   s_y: left vertical string, i.e. comment={"","yyy"} 
   s_X: upper horizontal string, i.e. comment={"","","XXXXXXX"} 
   s_Y: right vertical string, i.e. comment={"x","y","X","YYY"} 
 transparent= R_2range 
option allows you to make a certain range of matrix values invisible. 
If R_2range[1] < R_2range[2], the specified range will be  
excluded from the plot, while the values beyond the range will be shown. 
If R_2range[1] > R_2range[2], the specified range will be  
shown by color, while the values beyond the range will be excluded. 
 
Example:
 
 transparent={1. 3.}  # values WITHIN  the range are not shown 
 transparent={3. 1.}  # values OUTSIDE the range are not shown 
 Data can also be transformed and clamped with the 
 Trim( ) function.
 Examples:
  
 read matrix s_icmhome+"def.mat" 
 PLOT.rainbowStyle = "blue/white/red" 
 plot area def display  # min/max = {-3.,17.}  
 plot area def color = { 0., 20.} display 
 plot area def color={-0.,15.} transparent={-10.,5.} display 
 plot area def[1:12,1:10] link display comment={"X","Y axis"} 
# 
# 
 N=210 
 M=Matrix(N N) 
 for i=1,N 
   M[i,?]=Sin((Power(i-12.1 2)+Power(Count(N)-12.1 2))) 
 endfor 
 plot area M link display 
     # just a nice test, default boundaries are used 
 
 read pdb "1crn" 
 MDIST=Distance(Xyz(a_//ca)) 
 s=String(Sequence(a_1./A) ) 
 PLOT.rainbowStyle = "blue/rainbow/red" 
                   # contact map for 1crn, values below 4.8 and 
                   # above 10. A are not shown 
 plot area MDIST area color = {4.5 15.} transparent={10.,4.8} \ 
        display link grid comment=s//s 
See also the make plot associated plot method, for example
 
m = Matrix(10)
add header t m name="m"
make plot t "matrix=m;rainbow=white/yellow/green"
 
 
 
 
 predict model T_n [ M_nxm ] [key] [ name= s_colName ]
 
command applying a model developed by the learn command.
 
 print arg1 arg2 arg3 ...
 
 The arguments may be variables or constants of 
 integer, real, string, logical, iarray, rarray, sarray, matrix, sequence, or alignment type.
 
It is printed to stdout . To print to stderr use  the printf error ... command.
 Examples:
  
 print "no. of atoms=", i_out, "GRAPHICS.wormRadius=", GRAPHICS.wormRadius 
 
 
 | print bar : showing progress bar from ICM shell | 
 
 
 print bar { "." | " Start" | "End\n" } nSteps
 
Useful in showing progress in a long for loop.
Example:
  
l_commands = no 
print bar " Start" 100 
for i=1,100 
  read pdb "1crn"
  rm a_ 
  print bar "." 100 
endfor 
print bar " End\n" 
 
 
 a family of three functions for the formatted print:
  
  printf [error] s_formatString args ... # prints to stdout [or stderr] and s_out 
 sprintf [append] s_formatString args ... # prints to s_out only 
 fprintf [append] s_file s_formatString args ... # write to a file 
 printf  s_formatString arg1 arg1 arg2 arg3 ...
 formatted print, mostly follows the C-language printf syntax. 
The arguments may be variables or constants of only 
 integer, 
 real, 
 string type.
 s_formatString may contain
  
 
plain characters that are directly reproduced 
 
ambiguous characters:  
\\ - backslash, \" - double quote, %% - percent 
 
escape sequences for more tricky characters 
(\a - bell, \b - backspace, \f - formfeed, \n - newline, \r - carriage return, 
\t - horizontal tab, \v - vertical tab) 
and 
 conversion specifications for each argument of the printf command. 
Each specification starts from  % and may be followed by  - sign 
for left adjustment, and precision specification (e.g. %-5.2f ). 
 
 
%c - unsigned character 
 
%s - string 
 
%d %D - integer 
 
%[-] i1.i2f - float (real) in decimal notation 
 
%g %G - real in either  f  or  e  style, precision specifies the number 
of significant digits. 
 
%e %E - real in [-]d.ddde+dd style 
 
%o %O - unsigned octal 
 
%u %U - unsigned decimal 
 
%x %X - unsigned hexadecimal 
 The output is directed to the screen and is also saved in the 
 s_out 
string which can be later written or appended to a file.
 Examples:
  
 printf "Resol. = %4.1f N_ml= %-3d\n", a, n 
 write append s_out "log"                   # append to the log file  
See also: 
 sprintf [append] [s_] ( prints to the s_out string by default)  
 fprintf [append] s_file ( directly prints to a file). 
 
 print image [ window= I_xyPixelSizes]
 print the current screen image to the printer defined by the 
 s_printCommand ICM string variable. 
Use option window= to increase the resolution (however in 
this case bear in mind that the lines will get thinner and labels smaller).  
Be kind to your printer and color the background white (e.g. Ctrl-E ). 
See also: 
 write image  
 s_printCommand,  
 View ( window).
 Example:
  
 read pdb "4fgf"
 nice "4fgf"   
 color background white # or press Ctrl-E 
 print image 
# or 
 s_printCommand  = "lp -c -ddepartmentalColorPrinter" 
 print image window=View(window)*2 # increase resolution two-fold 
 
 
 
 
 query molcart s_sql_command|S_sql_commands [name=s_tableName] [connection_options]
 
Performs an SQL query in the connection specified by  connection_options .
For SELECT and other queries returning data, this command creates a table. 
The result table may be specified by the s_tableName parameter.
All SQL types are converted to appropriate ICM types.
 
Example:
 
 query molcart "select * from asgsynth where molid=1" 
 
See also: molcart, find molcart, load molcart
 
 quit [ s_message1 s_message2 .. ]
 Terminates ICM session.  Note that the message strings can not contain expressions or functions.
Example using two strings:
 
  HELP = " $P - program to do things"
  if Getarg()!="" quit " unrecognized arguments. " HELP
 
 
 
 [ Randomize angles ]a group of commands to modify ICM objects using random numbers. 
 | randomize internal variables in molecules | 
 randomize vs r_angAmplitude
 randomly distort current values of specified variables with 
either specified or default amplitude in degrees for angles and in Angstroms for bonds.  
The range is [CurrentValue - r_angAmplitude, CurrentValue + r_angAmplitude ]. 
Default amplitude is defined by mcJump ICM-shell variable (30.0 ).
 randomize variables in range
 randomize  vs r_angMin, r_angMax
 assigns random values within specified range to selected variables.
 randomize atom positions
 randomize  as  r_amplitude
 translates the specified atoms  
 as_ 
randomly and isotropically according to 
Gaussian distribution with the specified sigma.
 randomize molecule positions
 randomize ms  r_amplitude
 translates and rotates the specified molecules  ms_  randomly and  
isotropically according to Gaussian distribution with the  
specified sigma. We call it a Pseudo-Brownian random move. 
The same moves are used in the montecarlo docking protocol.
 Examples:
  
 build string "se ala glu tyr"
 randomize v_//!omg 50.   # distort all variables with  
                          # 50 degrees amplitude  
 
 randomize v_/14:21/phi,PSI -70., -50. # range [-70.,-50.]  
 
 copy a_ "ttt"
 mv a_ttt. a_
 randomize a_2 
 
 randomize a_/tyr/!ca,c,n,o 0.05
(Note use of PSI torsion in the last example.)
 
 
 [ read from file | Read binary | Read gui | Read html | Read fromstring | Read with filter | read all | Read index table | read http/ftp | read unix | read unix cat | read alignment | read color | Readcomp_matrix | Read conf | read csd | read database | read drestraint | read drestraint type | read factor | Read gamess | read grob | read iarray | read index | read library | Read librarymmff | read map | read matrix | read mol | read mol2 | read trajectory | read object | read pdb | read pdb sequence | read profile | read prosite | read rarray | read blob | read sarray | Read file by chunk | read sequence | read stack | read string | Read table | Read table chunk | Read smiles | Read table html | Read table mmcif | Read table mol2 | Read table mol | Read column | Read variable | Read view | Readv restraint | Read vrestraint type | Read xml | Read json ]read stuff from a file, pipe, string, ftp or http. ICM offers several ways of reading information in:
 
 read ...  s_fileName [ mute ] [ pattern= regexp ]
 reading from a file. Just specify the type and from what file. The file name is a string and must be quoted. 
Usually, the extension can be omitted if it is standard and is implied by the object type.  
Also, in several cases the program will try to find the requested file in a special directory  
( s_pdbDir for a PDB file, s_xpdbDir for an xpdb object, etc.),  
if is not found in the current one.
 Option mute will temporarily switch l_info to no .
 
Option pattern = regexp will filter out the lines of the text file that match the regular expression. 
 
 Examples:
  
 read pdb "1crn"                  
      # s_pdbDir will also be searched. 
      # It will also read "1crn.brk.Z"  
 
      # you may specify file extension explicitly  
 read iarray "a.a" mute  
 
 | read binary and read binary list | 
 
 [ read-binary-list ]read binary [ name= S_objNames [class1 class2 ..] ] [ s_fileName ] [ mute ] [ display | only | all ] [edit] [ list ] 
 read binary pdb s_pdb_code 
# see also s_xpdbDir 
 reads icm-portable binary project file. ICM allows one to save multiple ICM-shell  
objects to a single compact cross-platform binary file.
 
Reading everything or just some itemsBy default, ICM reads all objects in the file. If you want to see 
the list the objects in this archive, use the list binary command. 
To read selectively, use the name option or a list of object classes, e.g.
 
read binary object alignment name={"a","b"} "a.icb" 
# only extracts 3D objects, alignments, and variables named a and b 
Options: 
 
| name= S_objNames|name={"g1","m_gb"}|reads a subset of objects |  | mute|read binary mute | temporarily switches l_info to no |  | display|read binary display | displays molecules as they were saved |  | only|read binary udisplay | ignore display section, only read |  | undisplay|read binary only | same as only |  | list|read binary list | makes a table of content for the file |  | edit|read binary all edit s_file| reads password protected files |  : read binary list [ name =  ]
 
creates a table of content for the icm objects stored in a binary file. 
It the table name is not specified, T_out table is created.  
From the GUI interface you can double click on a table row to download a 
particular object from the file. 
From a command line one can read the desired objects with read binary file name= s_names or S_names 
  
 read binary only    # reads the default icm.icb file and suppress display
 read binary "aaa"   # reads all objects from aaa.icb 
 read binary name={"biotin","DOCK1_rec"} "example_docking" 
 read binary "example_docking" display  # reads and displays as saved 
 
 read binary list "example_docking" name="ed_toc" 
 read binary edit "secretfile.icb"  # will be prompted for the password
 s_xpdbDir = "http://ablab.ucsd.edu/xpdb/"
 read binary pdb "1xbb"
 
 
 read gui s_gui_filename
 
read a file with menus to modify, update, or extend the existing ICM menus.
The format of the menu file is described in the gui programming section.
You may also find many examples in the $icmhome/icm.gui file.
 
Example:
 
# create a file with new menus in usr.gui 
# add a line to your ~/.icm/user_startup.icm
  read gui "/home/smartypants/.icm/usr.gui"
 
 
 
 read html [ display | auto ] s_htmlFile [ name= s_newStringName ]  
 
 
read an html file and display its contents in the built-in ICM html-browser.
This command also creates a string variable.
Options:
 
name= s_newStringName : gives the ICM variable a name (the file name root is the default) 
display - create a string variable with the file contents and display the file
auto - makes the document pop in txdoc every time you read a project with this string.
 
If a html-document is read to ICM with this command, it can be stored in a single project along with 
other objects of the ICM shell.
 
 read html simple s_htmlFile 
 
 does not create a shell variable, just displays the file with txdoc .
 
The HTML documents can contain sections of the icm code (so called icmscript ) which
are executed upon clicking. Example:
 
<!--icmscript name="part1"
read pdb "1crn"
display a_*.
-->
...
<a name="part1" href="#part1">click here to execute icm script</a>
 
See also: help browser .
 
 read ... input= s_bufferString [ name= s_newName ]
 reading from an ICM string. Replacing file by a string is useful in CGI scripts,  
because the input information is easily accessible as an ICM string. 
Option name= s_newName allows one to specify a name of the new ICM-shell object. 
Note that multiline input can be directly pasted or typed after a triple quote 
followed by the closing triple quote.
 Examples:
  
 s_mat="1 2\n3 5\n0 6" 
 read matrix input=s_mat name="m23" # matrix m23 is created 
 s_seq = "> a\nAFSGFASG\n> b\nQRWTERQWTE\n" 
 read sequence input=s_seq  # read sequences a and b  
 show a b 
#
# using triple quoted multiline input:
  read matrix name='z' input="""
1 2 3
2 3 4
5 6 7
"""
 
 | read through filters: assign action by file extension. | 
 
 
 read ...  s_compressed_or_encoded_files  
 of any type directly. The files will be uncompressed on the fly, 
if the file extension and the corresponding filtering command are found in the 
the FILTER table. ICM understands .gz ( gzip ), .bz2 ( bzip2 ) and .Z ( compress ) 
compression.
 Examples:
  
 read object "aa.ob.gz" 
 read pdb "/data/pdb/pdb1crn.ent.Z" 
 
 read all s_allFileName
 reading from a  mixed file 
containing several ICM-shell objects (including tables) or data types. 
Legal types and separators:
 Example:
  
 read all "a.all"  # the file is given below  
 The a.all file may look like this:
 
  
#>r lineWidth 
  1.00 
#>R box4  
 0. 0. 1. 1. 
#>s tt.h 
this is a header string of table tt. The arrays follow. 
#>i tt.n 
15 
#>T tt 
#> name bd nlines  
icm 1985 160000 
bee 1998 100000 
inet 2000 80000 
 Such a file can be created with the
 write append icmShellObject file.all
 command
 
 | reading records from a large file via index table | 
 read { sequence | mol | mol2 } T_selectedEntries
 extract database entries selected via index table expression. 
A large file with multiple records (e.g. an .sdf file, an .ml2 file, a .fasta file,
etc.) can be indexed with the write index command and then individual records or groups
of records can be read via this index.  The entries can also be extracted into a string array
via the Sarray( T_selectedEntries ) function.
 
Example:
  
 read index "/data/inx/SWISS.inx" 
 read sequence SWISS[2:15] 
 read sequence SWISS.ID ~ "IL2_*" | SWISS.ID == "ML2_HUMAN" 
 # or 
 read index "NCI3D" 
 read mol2 NCI3D.DE ~ "^benz*" 
 sarray_of_ml2s = Sarray( NCI3D[1:10] )
See the 
 readMolNames sarray for details on database 
compound name storage conventions. Index file contains an integer position of the first character of 
an entry (ST as in STart), and the entry length (LE as in LEngth).  
Accepted types of the database index files are single files with multiple entries:
  
#>s Swiss.DIR 
/data/swissprot/seq 
#>s Swiss.EXT 
.dat 
#>T Swiss 
#>--ID---------ST-------DA------LE- 
104K_THEPA      0       906     1094 
.. 
 
See also:
 
 
 
 read .. "ftp://ftp.server.com/path/to/file" 
 
reading directly from ftp port. 
 
The ICM can read not only from files directly accessible from your computer but also files from 
remote locations via ftp or http. 
 
ICM includes a simple FTP client to simplify access to the 
   databases on the  internet. 
Files names may be specified as an ftp style URL: 
 ftp://[ user [: password ]@] hostname [: port ]/ path/ file
 If the  password  portion is omitted, the password will be prompted for.  
If both the user and password are omitted, anonymous ftp is used. 
In all cases passive (PASV) ftp transfers are used. 
If port is omitted, standard port (:21) is used.
 Example:
  
 read binary "ftp://hestia.sgc.ox.ac.uk/pub/datapacks/CENTG1_annot_NEW.icb" 
 read sarray "ftp://ftp.rcsb.org/pub/pdb/data/structures/divided/pdb/"+\ 
             "ab/pdb1ab1.ent.Z" 
 read sequence "ftp://embl-heidelberg.de/toby/ph.seq"  
URL-header may be used in existing mechanism of access to PDB: 
 s_pdbDir ="ftp://ftp.rcsb.org/pub/pdb/data/structures/divided/pdb/" 
 pdbDirStyle = "ab/pdb1abc.ent.Z" 
 read pdb "1crn" 
Remote files are stored in your local   
 s_tempDir 
directory. Do not forget to delete them from time to time. 
The system table FTP can be configured to delete temporary files and deal with firewalls. 
 
 read .. "http://www.server.com/path/to/file" 
 
reading directly from http port. 
 
ICM includes a simple HTTP client to simplify access to the 
   databases on the  internet. 
Files names may be specified as an http style URL: 
 http://[ user [: password ]@] hostname [: port ]/ path/ file[(?| )name1=value1&name2=value2...]
 
Example:
  
 read binary "http://hestia.sgc.ox.ac.uk/pub/datapacks/CENTG1_annot_NEW.icb" 
 read pdb "http://www.pdb.bnl.gov/pdb-bin/send-pdb?id=1crn" 
 
You may pass arguments to the http URL using POST or GET methods.
 
 
For GET method add '?' followed by URL encoded string in 'name=value&name=value' format.
Use  String( s_string html )  to URL encode parameters
Example:
read string "http://www.google.com/search?hl=en&q=molsoft&btnG=Search"
# if you query contains spaces or other non alpha-numeric characters you must URL-encode it
read string "http://www.google.com/search?hl=en&q=" + String("molsoft icm") + "&btnG=Search"
POST method differs from GET only by replacing '?' with a single ' ' (space). This method is
widely used when communicating with SOAP services.
Example script allowing to make a spelling suggestion:
url = "http://api.google.com/search/beta2"
HTTP.postContentType = "text/xml"
HTTP.protocolVersion = "1.0"
# form SOAP message 
# create a message with SOAP method and a namespace
req = SoapMessage( "doSpellingSuggestion","urn:GoogleSearch" )  
# add method arguments
req = SoapMessage( req,  "key","btnHoYxQFHKZvePMa/onfB2tXKBJisej" ) # get key from google
req = SoapMessage( req,  "pharse", "Bretney Spers" )  # some misspelled pharse
# send it to the server and read the resulk
read string url + " " + String( req )
# parse result 
res = SoapMessage( s_out )
# check for errors
if Error(res) != "" then
  print Error(res)
else
  print Value(res)
endif
 
See also: HTTP.proxy FTP.proxy
 
 read .. unix  unix_command
 reading from a unix pipe.  
(Note that you can read unix shell variables directly with the  
 Getenv( s_varName)} function).
 Examples:
  
 read unix date 
 if(s_out[1:3]=="Sun")print "Go to church" 
 
 read column unix grep "^DY" f1.ou | awk '{print $11, $12}' 
 show def 
 read .. unix cat
 reading from a buffer pasted with the mouse is a special case  
of reading from a unix pipe. Basically, just mark anything ICM-readable in 
any window, paste it to your ICM session and press Ctrl-D. Note that a file 
name which is usually used to name the ICM-shell object is missing now, 
therefore it may be named 'def' (i.e. default), rename it afterwards.
 Examples:
  
  read alignment unix cat 
  cd59n LQCYNCPNP--TADCKTAVNCSSDFDACLITKAG--------LQVYNKCWK 
  ly6n  LECYQCYGVPFETSCP-SITCPYPDGVCVTQEAAVIVDSQTRKVKNNLCLP 
  ^D 
  show def 
  rename def cd_ly 
 
  read sequence unix cat 
> cd59 
  LQCYNCPNPTADCKTAVNCSSDFDACLITKAG 
  LQVYNKCWKFEHCNFNDVTTRLRENELTYYCCKKDLCNFNEQLEN 
  ^D 
 
# read unix cat or read string are two equivalent ways to 
# load text to the  s_out string 
  read string 
  This is the text which will end up  
  in you s_out string. 
  ^D 
 
# read a mixed, read all -type, input and create two ICM-shell variables: 
read all unix cat 
#>s ss 
strrr 
#>i aa 
234 
^D 
 
 
 read alignment [ fasta | pir | msf ] [ s_aliFileNameRoot ] [ name= s_aliName ]
 read alignment file in a natural, pir or msf 
 formats. 
Upon reading, all the sequences are created as separate ICM-shell 
objects. The alignment is created as a separate object for msf-formatted 
files. In the case of other formats the alignment object is created 
if lengths of all the sequences together with dashed ("---") 
insertions are equal to each other.
 
 
 read color  s_clrFile
 If you want to have an alternative color file (say, "icmw.clr"), 
you can reread the colors.
 Example:
  
 read color "icmw"   
 
 
 read comp_matrix [ s_cmpFileName ]
 reads cmp-formatted file 
( *.cmp) 
containing one or several residue comparison matrices.
 
 
 | read conf: conformations from file | 
 read conf [ i_stackConf ] [ s_stackFileNameRoot|filename ]
 reads and sets one specified conformation from the conformational stack file *.cnf. 
If i_stackConf is omitted the best energy conformation is extracted. 
This command will work with both compressed and uncompressed (old) stack file formats.
 See also read stack.
 
 
 read csd [ s_csdFileNameRoot [ s_csdJournalFileName ] ] [ i_NofObjectsLimit [ i_startingObject ] ]
 reads the output of the Cambridge Structural Database (CSD)  search utility,  
namely, FDAT-formatted file (*.dat) and the optional session journal-file (*.jnl).   
Information about atomic coordinates, connectivity, parameters 
and symmetry of crystallographic cell is taken from the FDAT file.  
The journal file contains information about chemical names of compounds.  
If not provided, the REFCODE csd-name is assigned to the compound name of the ICM-object. 
(See also Name ([ os_ ,] real )).  
Optional  i_NofObjectsLimit and i_startingObject arguments 
allow you to extract a subset of several objects from a certain position of 
a multi-entry file. You can loop through all the objects by reading the chunks 
of up to about 1000 objects by doing the following:
  
 offset = 1 
 while( yes )                 # infinite loop  
   read csd "large" 100 offset  # read the next 100 objects 
   if(Nof(object) == 0 ) break  # exit upon reading all obj.  
# 
#    do whatever you want 
# 
   offset = offset + 100 
   delete a_*. 
 endwhile       
The object created is not of the ICM-type, use convert or write library  
to create an object or an ICM-library entry, respectively.  
Note that you can also read compressed CSD files (see FILTER). Examples:
  
          # all objects from ex_csd.dat and ex_csd.jnl 
 read csd "ex_csd"             
          # only the first obj. ; explicit name for the journal file 
 read csd "ex_csd" "ex_csd" 1 
To see how to generate all the symmetry-related molecules in the cell,  
see the transform command.
 
 read database [ field= S_fields ] [ group [name= s_tableName ] ]  s_databaseFileName
 read a text database with strings and numbers and create appropriate arrays. 
The field names in the database become names of the arrays upon reading. 
The list of array names will be stored in 
 s_out . 
Option group indicates that a  
 table 
should be formed (or ICM-shell structure) of the constituent arrays. This table 
will be renamed if option name is specified.
 You may also 
 group  arrays of the database to form a 
 table with a separate command.  
That will allow you to  
 sort 
all the arrays and search all the fields by the 
 Find( ) function.
 Examples:
  
 read database field ={"NA","RZ"} s_icmhome+"foldbank.db" group name="tt" 
 read database field ={"RZ","NA"} s_icmhome+"foldbank.db" group 
 show foldbank 
# 
# ANOTHER EXAMPLE 
 read database "LIST.db" 
 show database $s_out  # you may also list the arrays explicitly 
 write database $s_out "out.db" 
See also: 
 read column, 
 write database, 
 show database.
 
 read drestraint [ only ][ s_cnFileNameRoot ]
 read distance restraints (often referred to as cn ) from an a .cn file.  
Do not forget to  read drestraint types first.  
Option only tells the program to delete  previous distance restraint settings.
 
 
 read drestraint type [ only ] [ s_cntFileNameRoot ]
 read  distance restraint types from a *.cnt file.  
Option only tells the program to delete all previous distance restraint types settings.
 
 
 read factor [ s_factorFileNameRoot ]
 reads the Xplor-formatted structure factor file. 
The input is free-field, and each reflection record may be extended over several lines.
 Example:
  
INDEx 1 2 3  FOBS=9.0   SIGMA=3.3  Phase=50.0   Fom=0.8    
INDEx 2 -3 1 FOBS=31.0   SIGMA=2.3  Phase=20.0   Fom=0.3    
INDEx 5 6 6  FOBS=44.0   SIGMA=2.0 
To read the ICM-formatted structure factor table, just use the 
 read table command. ICM will recognize the file type. 
 
 | read gamess from the output file. | 
 
 
 read gamess s_gamessOutputFile
 
reads and parses the output of the gamess program. ICM converts the atomic (Hartree) energy units into kcal/mole 
and with some options can upload the minimized conformation.
 
 
 
 
 read grob s_groFileNameRoot [name=s_grobname]
 read graphics object from a file. If the name is not specified,
The object name is derived from the file name. 
This command supports various import formats:
 
Simple ICM graphics object format: ".gro"
Wavefront OBJ: ".obj"
OFF (Object File Format): ".off" , the default
Google Earth KMZ: ".kmz"
COLLADA: ".dae"
3DXML: ".3dxml"
 Examples:
  
 read grob s_icmhome+"/icos"  # load icosahedron from icos.gro file  
 display icos   # the name derived from the file name
 read grob s_icmhome+"/cube.gro" name="g"
 display g
 read grob s_icmhome+"/squirrel.kmz"
 display squirrel
 
See also: write grob .
 
 
 
 read iarray  s_iarrayFileName [ name= s_newIarrayName]
 read integer array from a file. File format is free.
 
 
 read index s_indexTableFile [name= s_ixTableName] [ database= s_newDataBaseDirectoryName ]
 read the index file for quick access to a database.   
The optional argument allows one to access
the database file at a location different from those specified  
in the course of indexing with the write index command.
 Examples:
  
 group table NCBI_ {"ID","DE","SQ"} "fd" \ 
        header "/data/nr/" "DIR" {"nr"} "FI" "" "EXT" 
# we created control table t  
  write index fasta NBCI_ "/data/nr/NR.inx" 
                   # make index and save to a file 
  read index "/data/icm/inx/NR.inx"   
                   # read index 
  show NR[2:5] 
                   # usage of the last optional argument 
                   # move the data file, keep the index file 
  unix mv /data/nr/nr /newdisk/data1/nr/nr 
  read index "/data/icm/inx/NR.inx" database="/newdisk/data1/nr/nr" 
 
 
 
 read library [ s_libraryFileNameRoot ] 
 
 read library [ residue | atom | color | drestraint | vrestraint | charge | energy ]  [ s_libraryFileNameRoot ] 
 The default library path is defined by the s_icmhome variable 
and the name is defined by the s_lib string ICM-shell variable.reads the ICM library files:
 Examples:
  
 read library   # reads all library files according to LIBRARY table 
 LIBRARY.res = {"icm","/home/jack/jack.res"} 
 read library residue            # to re-read only residue libraries 
 read library atom "new.cod"     # re-read different atom codes 
 read library color "new.clr"    # different colors 
 read library drestraint "new.cnt" # drestraint types 
 read library vrestraint "new.rst" # vrestraint types 
 read library charge "new.bci"     # charge increments 
 read library mmff [ s_libraryFileNameRoot ]
 reads the following additional library files for the mmff94 force field:
  
To calculate the mmff energy one needs to assign atom types, and  
 charges. The force field is switched with the ffMethod preference.  
An example: mmff.bbt 
 mmff.bst 
 mmff.tor 
 mmff.tot 
 mmff.vwt 
 Example:
  
 build string "se nter his cooh"  
 read library mmff 
 set type mmff  
 set charge mmff  
 display  
 minimize cartesian 
 
 
 read map [ reverse | xplor ] [ s_mapFileNameRoot ] [ name= s_mapName ]
 read ICM-electron-density map file and create an ICM-shell variable of the map type. 
ICM understands the following map formats:
  
CCP4 binary maps  
Xplor text format  
 If you read an external binary map file in CCP4 format, ICM will automatically 
recognize the Endian (the order of bits in numbers) and perform the conversion required. 
Option *reverse forcibly changes the Endian for binary maps generated outside ICM under  
a different operating system.  
We can not support many other popular map formats, or sub-types of the CCP4 or Xplor formats  
generated by different program. Use the 
 mapman program (Kleywegt, G.J. and Jones, T.A. (1996).  
xdlMAPMAN and xdlDATAMAN - programs for reformatting, analysis and manipulation of biomacromolecular electron-density maps and reflection data sets.  
Acta Cryst D52, 826-828) to reformat the map to one of the two supported formats if necessary. 
   
Reading many maps at once
 read map [ reverse ] [ s_mapFileNames ] [ name= s_mapNames ]
 read multiple files specified in comma-separated string ( e.g. "./map/gc,./map/ge" )  
and rename the maps by matching names from a comma-separated string. 
Examples:
  
read map "gc1,ge1,gh1" name="m_gc,m_ge,m_gh" 
 
read map "./gc1,./map/ge1,./gh1" name="m_gc,m_ge,m_gh" 
 
 
 
 read matrix [ s_matrixFileNameRoot ] [ name= s_MName ]
 read ICM-matrix file and create an ICM-shell variable of the matrix type.
 
 
 read mol s_FileNameRoot|X_chemarray [delete|auto|bond|simple|charge|type|stack] [number= {i_number|I_from_to} ] [name=s_rootName]
 read multi-molecule MDL mol -file  (a.k.a. SD-file) or directly from a  chemical array 
and create stripped molecular objects (they need further conversion). 
The molecules are named according to the first line of 
the name section of the mol/sd format. If this line is empty, the root name is taken from  
the option name= s_rootName, and the molecules are named like this: 
  "xx","xx2","xx3","xx4" ..  if the s_rootName is "xx"  . 
 If none provided the molecules are named 'm', 'm2', 'm3',..., sequentially. 
 Note that with the name option the first molecule keeps the name exactly as specified in the name option.
If possible readMolNames is utilized.
 In the default mode a pattern of single and double bonds is 
interpreted in order to identify aromatic systems. Then appropriate bond 
types are changed to aromatic (hit Ctrl-W to see the effect). This aromatic 
system assignment, however, is irreversible. If you write mol after 
that the new bond types will be saved.
 Set l_readMolArom to  no if you do not want to assign aromatic rings upon reading. 
(and formal charge and bond symmetrization for CO2, SO2, NO2or3, PO3 ). 
To suppress suppress the symmetrization and consequential charging of CO2, set the 
 l_neutralAcids to yes .
 S_out contains all properties: All the property fields specified in the mol file, e.g.
  
<logp> 
2.344 
<cas> 
234 
will be stored in the S_out array (one string for each object). 
The string can be further split into fields to extract the values, e.g.  
 cas  = Trim(Field(S_out,"cas_rn",1,"\n")) # sarray of cas numbers 
 logp = Rarray(Field(S_out,"logp",1,"\n")) # rarray of logp values 
Do not forget that ICM converts all strings to low-case. Options:
  
 exact: enforces the exact mol/sd format. 
The default reading mode is more tolerant to common format violations.  
 auto: automatically assigns compound names, if the name line is missing. 
The name is composed of the file name root and the order number of a compound. 
 hydrogen: automatically adds hydrogens
 type: automatically assigns MMFF atom types
 charge: automatically assigns MMFF atom charges according to the types
 stack: read multiple conformations of into an object stack instead of reading them as separate objects
 Examples:
  
 read mol "ex_mol.mol"  # you may skip the extension 
 logP = Rarray(Trim(Field(S_out,"logp",1,"\n"))) # rarray of LogP values 
 build hydrogen 
 wireStyle="chemistry" 
 display a_ 
 
Conformational generationThe _confGen script creates a table called conformers. In this table multiple conformations
of the same molecule can be recognized by column MOL_NUM with the molecular number in the input file. 
Now the multiple conformation can be read into a molecular object with a stack like this:
 
read mol stack (conformers.MOL_NUM == 2).mol # read molecule #2 grouping all conformations into a stack
 If you do not need to create molecular objects, but need to create  
a molecular spreadsheet instead, use the read table mol command.
 See also:
 
 
 read mol2 [ s_FileNameRoot ]
 read Tripos' Sybyl mol2 -formatted file (extension .ml2) and create stripped molecular objects  
(they need further conversion to become ICM-objects).
 Set l_readMolArom to  no if you do not want to assign aromatic rings upon reading. 
(and formal charge and bond symmetrization for CO2, SO2, NO2or3, PO3 ). 
To suppress suppress the symmetrization and consequential charging of the acidic groups like CO2, SO3, PO3  
set the l_neutralAcids to yes .   
These will work only if the input files contain only single and double bonds (no aromatic types).
 Examples:
  
 read mol2 "ex_mol2"  # this example file is provided  
 
 
 
 [ read trajectory write ]read trajectory [ s_movFileNameRoot ] read ICM-trajectory file with the Monte Carlo simulation trajectory.
 See also: display trajectory.
 
 
 read trajectory [ s_trj1 ] write s_trj2 [append] { i_fromFrame i_toFrame | I_frames }
 a trajectory editing tool. Read ICM-trajectory file 
with the MC simulation trajectory, grab a fragment 
[ i_fromFrame:i_toFrame ] and append it to some other 
file s_trj2.
 
 
 
 [ read object parray ]read object [ s_objFileNameRoot|filename ] [ number= { i_objNumber | I_objNumbers} ] [ delete ] [ name= s ] read previously formed and saved ICM-molecular-object file.  
If ICM object file contains several objects, all the objects are read.  
If argument i_objNumber is specified only the specified object is read.
 The names of the loaded objects from are stored in the S_out array, and the number of  
new objects in i_out .
 Options:
  
delete : temporarily sets l_confirm to no and, consequently, overwrites objects 
with the same name without a confirmation. 
number = i|I : reads one or several objects for a multi-object file 
name = s_ : redefines the object name 
 
 See also: build command to create an object from the sequence and 
 copy object command to copy the existing object.
 Example:
  
 read object "1crn" 
 read object s_xpdbDir+"4tna" name="tmp" delete 
 
 build string "se glu" name="glu" 
 build string "se his" name="his" 
 write object a_1. "obb"  
 write object a_2. "obb" append 
 delete object a_*. 
 read object "obb" number=2 
 S_objNames = S_out 
 show a_$S_objNames[1]. 
 
Some properties of the current object a_ which can be extracted (most of them are
also applicable to any selection):
 
Box( a_ )  - bounding box
Cell( a_ ) - crystal cell
Charge( a_ ) - total charge
Date( a_ ) - creation date of a pdb-file or 0
Field( a_ iField ) - one of 16 user fields. 
Field( a_ 15 )     - the number of missing residues
File( a_ ) - the source file name or empty string 
Label( a_ ) - object remark
Mass( a_ ) - total mass
Nof( a_ )  - number of atoms 
Name( a_ )[1] - object name
Parray( a_ )  - chem-object (represented by smiles)
Resolution( a_ )  - X-ray resolution or 9.9
Site( a_ .. ) - residue-feature information
Smiles( a_  ) - smiles string
String( a_ [number])  - string representation of the object selection
Sstructure( a_ [compress] ) - secondary structure string of all molecules
Symgroup( a_  ) - symmetry group as string
Transform( a_ ["bio" i] ) - crystal or bio transformations
Type( a_ 2 )  - type, like "ICM" "X-ray" .. 
Xyz( a_ )  - atomic coordinates
 
 
 
 
 read object parray s_obfile [name=svarName]
 
reads objects from .ob file into a parray . In this case the objects are not loaded into the
workspace but instead are stored in an array. The array can also be added to a table, e.g.
 
read object parray "threeobj.ob"  # creates array threeobj
group table t threeobj "Obj"
 
 
 [ read-pdb-mmtf ] 
 read pdb [all [stack]|charge|delete|header|html|sstructure] [ s_pdbFileNameRoot [ .mol/res1:res2/at1,at2,..] ] 
 
read  pdb-formatted file and create a molecular object of a corresponding. 
 
You can read all the information from the file or only the part you need: 
 
  
the whole object: read pdb "/data/pdb/2ins" 
one or several chains: read pdb "/data/pdb/2ins.a,b/" (if chain is not named, 
refer to it as 'm') 
chain fragment: read pdb "2ins.a/3:16" 
certain atoms:  read pdb "2ins./3:17/ca,c,n" (you may use name patterns 
with wildcards too) 
 ICM parses a PDB file and detects problems. It may issue 72 kinds of warnings and 33 kinds 
or errors. To check if a certain type of error occurred use the Error ( i_errWarnCode ) function.
 Structures determined by NMR are usually represented by several models  
separated by MODEL and ENDMDL fields. 
By default only the first model will be read in.
 Options:
 
 Deleting alternative atoms Frequently there are alternative atoms in PDB objects. Sometimes you want to get rid of all secondary 
alternatives and make the 1st alternative the detault. 
To achieve follow this example:
  
read pdb "1hyt" 
set comment a_//Aa,A1 " "  # clear the alter-symbol of the main alternative 
delete a_//A               # delete atoms with non-space alter-symbol 
write pdb "clean"          # this object does not have alternatives 
 Error detection.
 ICM detects chain missing residues according to the 
differences between SEQRES sequence and the residues with coordinates and 
returns the total number of missing residues in the i_out system variable.  
  This number can also be returned by the  Field( a_ 15 )  function.
E.g.
  
 read pdb "1amo.a/" 
 make sequence a_1.1  # sequence 1amo_1_a extracted 
 if(i_out>1) then 
   read pdb sequence "1amo"  # sequence 1amo_a read 
   a=Align(1amo_a 1amo_1_a) 
   build model 1amo_a a_1.1 a   # patch the missing fragments 
 endif 
 See also: convert command to turn it into an ICM-molecular object and the 
 FILTER preference to see how to read the compressed pdb-files directly.
 The fields parsed by ICM.
 ICM parses most of the information from the PDB database entry and 
allows one to manipulate with this information in the ICM-shell. The following fields are parsed:
  
Treatment of water molecules. Water molecules become molecules named sequentially w1,w2,w3...  
Their original numbers which are stored in the residue field 
become their 'residue' numbers, e.g. to select water molecule 
number 225 and 312, do not use the w.. names of water molecues, 
but use the a_w*/225,312 selection instead.ATOM   : all atom properties including alternative chains. To show the info:  
 show a_//*. Function to extract the atom properties: 
  
You can also  
 select by many different properties of atoms, residues,  
molecules and objects directly in the selection expression or via the Select function. 
HETATM : all properties including alternative chains (to clear the flag, use set comment as " " )
EXPDTA : assigned as the ICM-object type. ICM function: Type( os_ ). 
REMARK   2: resolution is extracted. ICM function Resolution( a_ ). 
REMARK   4: is shown as info upon reading. 
REMARK 800: description of  SITEs is extracted. Can be viewed by 
 show site. You can select these sites by a_/F" siteID" 
COMPND : assigned to the object comment field. Editable and reassignable with the 
 set comment. The comment is returned by the ICM function 
 Namex . You may directly select with the a_"searchString". expression. 
SSBOND:  
DBREF: database reference information shown upon reading 
SITE : sites can be shown with the 
 show site, can be selected with the a_/F expression.  
HELIX : returned with the ICM  Sstructure function. 
SHEET : returned with the ICM  Sstructure function. 
SEQRES: this sequence can differ from the sequences extracted from the ATOM records. It is read with the 
 read pdb sequence command and becomes an ICM-shell  
 sequence 
SCALE,TVECT,MTRIX: read but not used, the CRYST1 and ORIGX information is used instead. 
CRYST1,ORIGX : the transformation vector 
is returned by the ICM function Symgroup and can be applied with the transform command. 
Date of creation of the file (part of the HEADER record) can be returned by the  Date( a_ )  function.
The number of residues missing in the density but present in the SEQRES record ( i_out or Field(a_,15) ).
 Option charge tells the program to load atomic charge from 
the occupancy field and reset occupancies to 1., and atomic radii 
from the B-factor field.
 Option sstructure tells the program to automatically assign the 
secondary structure if it is not provided in the PDB entry.
 The file will be first searched in the local directory. Extensions *.pdb and 
*.brk will be tried unless explicitly specified. If not found the s_pdbDir 
directory or directories will be looked up according to the pdbDirStyle 
preference. This preference allows file names like pdb1abc.ent recognized by 
the read pdb "1abc" command.
 Examples:
  
 read pdb "1crn"          # 1crn.brk should be either in the local  
                          # directory or in s_pdbDir one  
 
 read pdb "2ins.a/"       # load only chain 'a'  
 
 read pdb "2ins.a//ca,c,n" # load only the backbone of chain 'a'  
 
 read pdb "1crn./4:17"    # load only 4:17 fragment from 1crn.brk  
 read pdb mmtf "/data/pdb_mmtf/7ah9.mmtf"  # see pdb in mmtf format below
 
See also:
 read binary pdb
 
 
 
 read pdb mmtf s_pdbCodeOrFileName
 
reads PDB entry in MMTF format. MMTF is a compact binary format which is particularly 
useful to read large PDB entries which cannot be represented in standard PDB file format.
 
  Example:
 
read pdb mmtf "/data/pdb_mmtf/7ah9.mmtf"  # injectisome from Salmonella
 
 read pdb sequence [ resolution ] [ s_pdbFileNameRoot ]
 quickly extract only amino-acid sequence from SEQRES records of a 
pdb-formatted file without actually loading molecules.  
This option does not work with pdbDirStyle = "PDB ftp-site" or "PDB web-site" .
 It is important to understand that sometimes sequence from the SEQRES records  
  does not match the sequence extracted from the ATOM records, because some 
residues in flexible loops and ends are invisible. 
Option resolution appends X-ray resolution to the sequence name (like 9lyz_a19, 
19 stands for 1.9 resolution). 'No' is appended for NMR and theoretical structures. 
It can be used later by the group sequence unique command to compile the 
 representative list of PDB chains.
 PDB is famous for having numerous errors which are never fixed. In SEQRES  
sometimes the stated number of amino-acids in SEQRES does not correspond to  
the actual number of amino-acids (e.g. 1cty, 1ctz, 1ctz, 2tmn, 1ycc, 2ycc ) .
 The sequences will be called according to the pdb code and the chain name.  
In case of one chain without a name, ICM assigns name "m"  .  
e.g. 1est_m , 2ins_a , 2ins_b.
 Records are converted to lower case. In rare cases, such as 1fnt, 
in which there are both upper and lowercase chain names, the lowercase 
names become uppercase, e.g. 1fnt_a for the first chain and 1fnt_A for 
the 33-rd chain.
 Chains with numerical chain identifiers are automatically converted to 
literal chain IDs in the same way as the read pdb procedure  
does that. Chain 0 becomes a , chain 1 becomes b , etc.
 An example script to detect problems with pdb sequences (you can build the list with the  
 makeIndexPdb and mkUniqPdbSeqs macros )
  
 read sarray s_pdbDir + "pdb.li" name="a" 
 l_info = no 
 errorAction = "none"     # otherwise breaks at pdb1aa5.ent 
 for i=1,Nof(a) 
   read pdb sequence s_pdbDir + a[i] 
   delete sequence 
 endfor 
 Error> no SEQRES records in file  /data/pdb/af/pdb0af1.noc.Z 
 Error> no SEQRES records in file  /data/pdb/ao/pdb1ao2.ent.Z 
 Error> no SEQRES records in file  /data/pdb/ao/pdb1ao4.ent.Z 
 Warning> Sequence of chain  "pdb1ati_c"  starts with 'UNK' and is unknown 
 Warning> Sequence of chain  "pdb1ati_d"  starts with 'UNK' and is unknown 
 .. 
 
The number of residues which are present in the SEQRES record, but are missing from
the ATOM records is returned by the i_out variable, or  Field( a_ 15 )  function.
 
 
 read profile [ s_prfFileNameRoot ] [ name= s_prfName]
 read ICM-sequence profile from a file and create an ICM-shell variable of 
 profile type.
 
 
 read prosite [ s_prositeFileName ]
 read all the patterns from the prosite database (Amos Bairoch, University 
of Geneva, Switzerland) and create two string arrays:  prositeNames, 
and  prositePatterns, containing names and patterns, respectively. 
The search may be performed by the find prosite 
command. Check also the find prosite command.
 Examples:
  
 read sequence "zincFing.seq"  # load sequences   
  find prosite           # search all 1374 patterns 
                         # through the sequence  
See also: s_prositeDat .
 
 read rarray [ s_rarrayFileNameRoot ] [ name= s_RName]
 read real array from a file. File format is free.
 
 
 
 
 read blob [ s_fileName_or_URL ] [ name=s_blobVar ]
 
read any data from ~s_fileName_or_URL or standard input into blob shell variable.
 
See also: blob Blob
 
 read sarray [connect] [comment] [underline=i] [number=i] [ s_fileName ] [ name= s_varName ]
 read any text from a sar-file as a bunch of strings separated by carriage returns.  
Create an ICM-shell variable of sarray type.
 
Options:
 
Example:comment : skips comment lines starting from hash (#).
connect : will connect/merge several consecutive lines if
 a continuation symbol (backslash) is found
 at the end of the line. 
underline= iFirstLine : skips lines before this number 
number= nLines : read only specified number of lines 
 
line1 \
 continue in line 1\
 more to line 1
line 2
will turn into: 
#>S a
line1    continue in line 1   more to line 1
line 2
* underline= N : reads only under specified line ( skips N first lines). 
 | reading large data amounts by chunk | 
 
 
 read sarray [limit=n_records] [keep] [separator=s_sep] [ s_fileName ] [ name = s_varName ]
 
reads up to n_records. s_sep is used as a record separator. 
Sets l_out to yes if the end of the file is reached.
 
keep option keeps file open for the next read chunk. Without keep the command will always read from the beginning of the file.
 
Example: (read uniprot file)
 
while (yes)
 read sarray keep separator = "//\n" limit=100 "/data/uniprot/uniprot_sprot.dat" name="s"
 if (l_out) break 
 for i=1,Nof(s)
 	Match(  uniprot_sprot[i], "ID\\s+(\\S*?)" 1 )
 endfor
endwhile
 
 
Example:
 
while (yes)
 read table mol keep limit=1024 "large.sdf" name="t"
 if (l_out) break 
 # process 't' 
 print Nof(t)
endwhile
See also commands that support limit and keep options : 
read table mol keep limit=.. command to read an .sdf file by chunks
read table chunk separator=..   command to read an .csv tables (other separators) by chunks
 
 
 
 
 
 [ read sequence database ]read sequence [ group [= s_groupName]] [ fasta | swiss [auto|selection..] | pir| gcg| msf ]  [ s_seqFile ] read amino-acid or DNA sequence from a variety of sequence file formats 
and create an ICM-shell variable of sequence type. The GeneBank format is recognized automatically.
 Option group with optional s_groupName creates a sequence group on the fly.
 
 Option auto (with fasta or pir) will create an alignment if all sequences (with dashes) in a multiple fasta file have the same lengths.
 
 Option selection (with fasta or pir) will create a selection if the sequences read.
 
 read sequence swiss [full] [ field= S ] [ group [= s_groupName]] [ s_seqFile ]
 
 read sequence swiss [full] web s_swissProtName
 
With option swiss i_2out contains the next residue after the signal peptide or 1 if no signal is found.
Option full will read all FT sites with their full description. 
See also Table( seq_swiss site ) function.
 
Example:
 
read sequence swiss web "1433B_HUMAN"
show site 1433B_HUMAN
read sequence swiss web "CCL1_HUMAN"
show i_2out # shows beginning of mature peptide after signal peptide
 
Note, 
that if you want to ignore some types of the swissprot FT feature table, e.g. 
 HELIX, or COIL, see swissFields )
 See also: swissFields
 
 
 read sequence  T_indexSubset
 read amino-acid or DNA sequence from an  
 indexed sequence database. 
 T_indexSubset contains the selected entries which can be defined by a 
 table expression (e.g. SWISS.ID=="^IL2_*"). 
The names of the sequences extracted from the database to the ICM memory 
are stored in the S_out system string array. 
 i_out 
contains the number of the sequences loaded. These variables are used in 
automated scripts for bioinformatics (see searchSeqDb or searchPatternDb) 
macros.
 Examples:
  
 read index s_inxDir+"/SWISS" # load the Swissprot index 
 read sequence SWISS[1:20]        # first 20 entries 
 show S_out[1], $S_out[1]         # show the 1st name and the sequence 
# 
 read sequence SWISS.ID=="^IL2_*" & SWISS.ID!="*_MOUSE" 
 S_seqNames = S_out 
 for i=1,Nof(S_seqNames) 
   seqName = S_seqNames[i]  
   show seqName, Nof(String($seqName),"[KR]") # stat. of positive charge 
 endfor 
 
 
 read stack [ append ] [ s_stackFileNameRoot ]
 read  stack of conformations 
from a cnf-file. This command resets the 
 energy terms as they were saved in the cnf-file. 
The terms string is returned in the s_out variable.
 Both full stacks saved with the write stack simple command 
and compressed stack files (the default) will be recognized. 
Note that ICM versions before 3.022 could not read or write the 
compressed format.
 
 
 read string [ s_textFile ] [ name= s_sName]
 read any text from either standard input or 
a s_textFile. Place the result into the 
 s_out string.  
Reading string from standard input 
can be used to get URL-encoded stream generated by the HTML-form. 
The read string command can also read from ftp/http.
 See also: read unix 
command which allows one to read in ICM the output of any unix command.
 Examples:
 
cat someFile | icm -s -e "read string;Tolower(s_out)"
more:  
#Put these lines into _tmp file. See how to precess the HTML-form output. 
 read string     # e.g.: <b>echo "aaa=bbb&ccc=ddd" | icm _tmp</b>  
 a=Table(s_out)  # split the input string into two string arrays  
                 # a.name and a.value and form table 'a'  
 show a          # equivalent to <b>show column a.name a.value </b> 
 quit 
# 
 read string "ftp://ftp.pdb.bnl.gov/index/compound.idx" name="pdbList"  
In the last example the file will be downloaded from the PDB site  
and dumped into the pdbList string variable.
 
 | read table in ICM or CSV/TSV format | 
 ICM-formatted tables  read table [ database ] [ name= s_tableName ] [ s_tableFileName ]  [split= s_fieldDelimeter ]
 reads internal ICM text format for tables. It has fields for the table headers. 
The table name is saved to the s_out variable.
ICM needs two lines with the table name and the field names in the following format: 
(an example):
  
#>T atm 
#> name code weight  
hydrogen 1    1.008 
.... 
 
 s_fieldDelimiter is NOT used in the ICM table reader. If you want to change the default field delimiter use the 
 split= s_fieldDelimiter argument. To skip multiple occurrences of a delimiter symbol, repeat it two times, e.g. 
  split= "  \t\t" ( the same trick is used in the s_fieldDelimiter variable for the Field function )
 CSV or TSV formatted tables
 
 read table separator=[","|"\t"|":"|"$"..] s_csvtableFileName [delete][header][simple] [name=s_tableName] [comment= s] 
 
reads tables in portable csv (comma-separated-value), tsv (tab-separated-value) or other separator-based text spreadsheet formats that can be exported from excel.  
Options: 
 
comment[=] : skips lines beginning with the symbol (pound sign  # is the default)
delete : deletes table with the same name
group :  group multiple columns of real type into one column of vectors (same with integer columns)
header : interprets the first line as the names of the columns. 
number : treat empty fields in numeric columns as ND  (the default action is to keep those columns as string arrays)
simple :  quotes are not treated as regular characters
 
 
Flanking blanks for each field are trimmed. For example to read the following table from iq.csv file: 
  
name,IQ 
  Max, 150  
 Jack, 150  
Peter, 130  
type:  
read table separator="," header "iq.csv"  # or 
read table separator="," header "iq.csv" name="t" # to rename the table 
 Normally the csv/tsv format does not allow any line comments. 
ICM supports an extended format in which some lines can bee commented out 
by a comment string in the beginning of the line, e.g.
  
> cat iq.csv 
# this is a list of IQs 
name,IQ 
Max,  150  
Jack, 150  
Peter,  130  
> icm 
icm/> read table separator="," header "iq.csv" comment="#" 
 See also: table,  icm.tab file, add column .
 Examples:
  
 read table s_icmhome+"atm" name="ATOMS"  # atm.tab file by default 
 sort ATOMS.weight   # sort according to the weight array  
 
 
 | read table by row-chunks in CSV and related formats | 
 
 
 read table sv_file separator= s_symbol name=s_tabname keep limit=i_nRows
 
reads from a large table a chunk or rows.  
Here is an example how to read a file without column headers
 
while (yes)
   read table separator="," "t_big.csv" keep name="t" limit=10240
   if (l_out) break
# show t
   n += Nof(t)
endwhile
A trick to incorporate column headers. It reads the first chunk with the header option and 
renames the columns for the other chunks 
first = yes
n = 0
while (yes)
   read table separator="," "t_big.csv" (!first ? : header) keep name="t" limit=10240
   if (l_out) break
   if (first ) S_cols = Name(t column name)
   if (!first) rename column t name=S_cols
   first = no
   n += Nof(t)
endwhile
 
See also:
 
 
 | Reading SMILES file into a table | 
 
 
 read smiles [header] s_filename [name=s_newTableName]
 
reads the s_filename file in smiles format into a table. Table name is derived from the file name
if s_newTableName is not specified explicitly.
 
With the header option specified, the first line in the file is used for table column names.
Example of the space-separated smiles file with header:
 
chem prop
CCC  1.0
CCCC 2.0
read smiles header of this file will create a table with two columns chem and prop 
 
 
 | Reading an html table into an ICM table | 
 
 
 read table html s_htmlFile|or URL [name=s_newTableName] [all] [header=[yes|no]] [simple]
 
this command will read a file containing one or several html tables,
then will select the largest table (by the number of rows) and read it into an ICM table.
 
Options:
 
all read all tables rather than the largest one;
header interpret the first row as column names even in cases when the
 column name row is incorrectly marked with the TR tags instead of the correct TH tags;
header=no will do the opposite: force the reader to read the first row as a table row; 
simple remove all HTML tags from the cell values.
 
 
 
 
 | Reading an mmcif-file into an ICM chemical table. | 
 
 
 read table mmcif s_mmcifFile
 
reads a pdb mmcif file with multiple small molecules (not for the whole pdb) 
into a chemical table. The short description of mmcif format is given below. 
The full description is provided by pdb .
 
This command will create a chemical table and all general properties will be converted into columns.
 
Example (reading all PDB ligands):
 
read table mmcif "ftp://ftp.wwpdb.org/pub/pdb/data/monomers/components.cif.gz" name="lig" 
make flat lig.mol
 
 
 
 | Reading an MOL2-file into an ICM table. | 
 
 
 read table mol2 s_mol2FileName 
 
reads an mol2 file into an ICM table which can be visualized as a chemical 
spreadsheet. 
 
 | Reading an sdf-file into an ICM table. | 
 
 
 read table mol [ exact | unique ] [simple|simple=S_cols]  s_sdfFileName [ index ] [limit=i [keep]]
 
 read table mol [ exact | unique ] T_sdfFileIndexExpression [ index ] 
 reads an sdf file into an ICM table which can be visualized as a chemical 
spreadsheet. It either reads all entries directly from the file, or read 
the entries selected by the index expression (e.g. chemvendor[{1,15,53}] ). 
The the latter case the  index file  needs to be read in first. 
In contrast to the read mol command, the read table mol  
command creates only a table and does not create explicit ICM molecular objects  
Consequently it can read over hundred thousand mol-records into a table without 
overwhelming ICM.
 
The table name is saved to the s_out variable.
 
The property fields of the sdf file, e.g.
  
> <logP> 
 2.3 
> <logD> 
 1.8 
are converted automatically into table columns with appropriate type.  
The mol-file core which describes atoms and bonds  
is automatically displayed as a chemical structure by ICM. By default the empty 
property fields are interpreted as having 0. value, if all non-empty fields 
are numerical. Options:
  
simple  : keeps all columns as string arrays. Optionally a list of column names can be provided: simple = {"col1","col2"}. 
              In this case only listed columns will be kept as string arrays
exact   : keeps columns containing numbers and empty fields as string arrays  
instead of trying to guess the numerical default value for those columns.  
index   : creates an extra column named IX in which the compound order number in the file 
is stored. If property IX already exists in the file, its values will be overwritten. 
keep    : preserves the file pointer and allows one to read the NEXT frame (or group or rows) with the next read table mol command. See also: l_out  to indicate if the next read is possible.
limit= n : determines the size of the chunk to read at a time.
unique  : standardizes the property field names. For example, "Molecular Weight", 
 "MWeight", "Mol_weight" will be translated into "mw". This option may be helpful if you want 
to merge two sdf files.  
 Example:
  
%icm -g 
read table mol unique "sigma.sdf" 
 
write index mol "sigma.sdf" "sigma.inx" 
read index "sigma.inx" 
read table mol sigma[{1,15,26}] 
Reading chunks from t.sdf and spitting out chunks of the itb stream: 
  while yes
    read table mol "t.sdf" keep name="t" limit=1024
    if (l_out) break
    write binary frame t
  endwhile  
See also:
 
 read column [ separator= s_Separator] [ group [ name= s_tableName ] ]  s_fileName
 read a multicolumn table with strings and numbers and create appropriate arrays. 
If you add a ruler starting from #> and looking like this
  
#>-name1---name2------name3---------name4--- 
the arrays will be created with specified names. If ruler is missing, 
default names (I1, I2 ..., R1, R2,..,S1, S2, .. for iarrays, rarrays and 
sarrays, respectively) will be created. You may control field formation by 
 s_fieldDelimiter variable or by adding separator= s_Separator explicitly. 
The list of array names will be stored in s_out so you can always say  
 read column "res" 
 show column $s_out 
# note that a triple quote permits multiline entry
read column group name='t' input="""   
a 1 2.2  
b 2 3.2  
"""
show t
 
Another way to read a table into ICM arrays is to read it as table with the read table
command and split the table afterwards.
 Reading comma-separated-value or tab-separated-value formats
 While the best way to read a csv file is to use the read table separator=","
command, you can use the read column group command as well.
To read a table in comma-separated-value ( csv ) or tab-separated-value ( .tsv ) format 
redefine the s_fieldDelimiter value (or use the separator="," option), 
and use the read column group command.
 
  
read column group name="t" "t.csv" separator="," 
write t separator="," 
 See also: write column, read table , split table , 
 show column, icm.col.
 
 
 | Reading internal variables from a file | 
 read variable [ s_varFileNameRoot ]
 read ICM-molecular object variable values (torsion angles, phase angles, 
bond angles, bond lengths) from a var-file.  vs_out 
selection will contain a selection of variables which have been modified 
by the command.  
Variables are assigned according to the residue number and 
the variable name. If residue name is different (i.e. you want 
to assign phi,psi of an alanine 15 to glycine 15), the program  
sends a warning. 
If more than one molecule is present in the current object, 
matching of molecule names is required. 
See also set vs_ command.
 
 
 | Reading and setting a vew from a file of view parameters | 
 read view [ s_viewRarrayName ]
 read rarray of 37 display parameters for window size, scale, view matrices, etc. and set them.  
See also: set view, View () function
 Examples:
  
 build string "se ala"  
 display   
 write View( ) "a" 
# rotate the image  
 read view "a" # restore view  
 
 
 | Reading vrestraints from a file | 
 read vrestraint [ s_rsFileNameRoot ]
 read variable restraints (often referred to as rs ) from a *.rs file.  
Do not forget to read vrestraint types first. 
Option only tells the program to delete previous variable restraints.
 
 
 | Reading vrestraint types from a file | 
 read vrestraint type [ s_rstFileNameRoot ]
 read variable restraint types from a *.rst file. 
Option only tells the program to delete  previous variable restraint types.
 
 
 
 
read XML formated document into a hash(formely collection ) object.
 
 read xml { s_fileName | s_url | input=s_xmlBuffer } [name=s_name]
 
Example:
 
read xml input="<a>1</a>" name="x"
#
read xml name='x' "http://www.drugbank.ca/system/downloads/current/drugbank.xml.zip" 
show name x
 
See also: array , xml drugbank example
 
 
 
 
 
JSON (an acronym for JavaScript Object Notation pronounced) is a lightweight text-based open standard 
designed for human-readable data interchange. Read more here.
 
read JSON formated document into collection object.
 
 read json { s_fileName | s_url | input=s_jsonBuffer } [name=s_name]
 
Example:
 
read json input='{ "a":"b", "c":[1,2,3]}' name="x"
 
 
 
 
 [ Rename column table | Rename molcart | Rename system | restore preference ]rename oldName { s_newName | u_newName } 
 rename atom as1 s_newElement\n\
 
 rename column table ...   
 
 rename as1|rs1|ms1|os1 s_newName  # rename os full -for description\n\
 
 rename image P_imageArray i_index s_name\n\
 
 rename page  P_pageArray  i_index s_name # see below, for icmdb\n\
 
 rename sequence resolution   # from 1abc_a to 1abc_a21 for sequences linked to a_A. used in group unique..\n\
 
 
rename anything to anything else. More specifically you can rename 
commands, ICM-shell variables, objects, molecules, residues and 
atoms. Renaming commands is possible, but then you must not forget to 
change them in all the standard ICM-scripts. Using aliases 
instead allows you to use both the original and the translation, 
however it slows down the ICM-shell interpretation. Be careful with 
a new name to avoid name conflict. 
 
 | rename columns in a table | 
 
 
 rename column tab [column selection [inverse]] [name=S_new|s_colname_base ("A")]
 
  renames large groups of columns, handy for table with thousands of columns, a good method to simplify and shorten column names. Allows to create excel style names or names reflecting column index (e.g. t.1 t.2 t.3 ... ) 
 
Arguments: column_selection: There are multiple ways to specifiy columns to be renamed (option inverse inverts the selection ):
 
no_arguments : rename all columns
I_cols  : by an array of of column numbers, e.g. 3//5//7  or {1,3}
S_cols  : by an string array of column names, e.g. 'A'//'C'//'D'  (you may use the full name, e.g. 't.A' as well)
selection : by GUI selection (Ctrl-click, with or without Shift, on column headers)
iarray and/or rarray and/or sarray and/or parray  : by keyword for column type
i_from :  rename columns from number i_from to the end.
i_from>  ito | only : by column range  e.g. 1, or 3 10, or 3 only .
 
Destination namesThe destination names are specified either by a string array of new names (with or without the table name)
under the name= option (e.g. name="A"//"C"//"Name" ) , or by a string with the root name of the first column to be renamed
( e.g. "A", or "1" )
 
 
  add column t 1//1 ; add column t 2 3 4 5 6 "a" "b" 3.3 4.4
  rename column t     # rename all cols in excel style A,B,..
  rename column t "1" # rename all cols as t.1 t.2 t.3 ..
  rename column t 4   # starting from column 4 
  rename column t 4 6 inverse   # rename all but columns 4,5,6
  rename column t iarray rarray # rename only numeric columns
  rename column t 'A'//'B' name="F"//"D" # explicit new names
  rename column t rarray "R2" # R2,R3,R3 etc.
  rename column t "COL" # COL1,COL2 etc.
 
  See also: rename,  delete column table, select column table
 
>>rename-object{rename.molecule,rename.residue,rename.atom} 
h4--  rename object 
 rename { os [ full ] | ms | rs | as }  s_newName 
 change selected names. To change the long name of the object (it can contain space 
in contrast to a regular object name), use the full option.
 
If you rename multiple molecules and provide a s_neweNameRoot (say, "a") at attempt will be 
 made to name them like this: "a","a1","a2",... . 
 Examples:
  
 rename old   mature         # for elderly  
 rename sequence[1] ins      # rename the first sequence  
 rename a_mol1/3/ca "ca1"    # rename an atom  
 rename a_mol1/3    "alam"   # rename a residue  
 rename a_mol1      "kuku"   # rename a molecule  
 rename a_H         "h"      # all heteroatoms h,h1,h2,h3,..
 rename a_1.        "dna"    # rename an object  
        # rename the full name of the object  
 rename a_1. full "hydroxanthine phosphoribosyl trnasferase"   
 list a_1. 
Groups of atoms also can be renamed from a chemical (2D) template with the
 set bond topology as chem_source label   command.
 
 
 
 
 
 rename molcart table s_oldTableName s_newTanbeName [connection_options]
 
renames Molcart table including all index tables.
Database connection may be specified by  connection_options 
The table name s_oldTableName may be prefixed by the database name, else current database is assumed.
 
See also: molcart, list molcart
 
 
 
 rename system s_fileNameFrom s_fileNameTo 
 
Renames or moves a file. If target file exists it will be overwritten.
 
Example:
 
rename system "/tmp/aaa" "/tmp/bbb"
 
See also: sys , delete file delete directory
 
 
 
 restore preference [ all | prefname1 prefname2 ... ]
 
restores values of the named (or all) GUI preferences to the default values. 
 
 
 return [ error ] [ s_message ]
 return from a macro before endmacro usually under specific conditions.  
Similar to exit command returning from a file to interactive mode. 
Option error will set the error flag which can later (outside 
the macro) be checked with the Error( ) function.  
The message s_message will be stored in the s_out string shell variable.
 Examples:
  
 macro aa 
    if(Nof(sequence)==0) return   # a silent return  
    ..... 
  endmacro 
 
  macro aaa as_1 
    if(Nof(as_1)==0) return error " aaa> Nothing to do"   
    show as_1     # a pretty silly macro  
  endmacro 
 
  macro bbb 
    if(Nof(object)==0) return error " Error_in_bbb> No objects in the system" 
    .... 
  endmacro 
  bbb             # call this macro 
  if(Error) print "something went wrong with macro bbb" 
 
 
 [ rotate object | rotate grob | rotate view | rotate chem ]the main rotate command. Subtypes of this command include 
rotate object,  
rotate view,  
rotate grob. 
rotate 2D depictions of chemical compounds in a table column. 
interruptible background rotations and rocking movements. 
Also, to perform a fixed number of interruptible rotations or rocking movements, use this:
 
GRAPHICS.rocking=5  # for X-rotation. see other types of rocking/rotation
GRAPHICS.rockingSpeed=3.
display rotate 2  # perform two full cycles and stop
 
 rotate [ os |  ms |  g_grob ] M_rotation
 rotate an object ( os_ ), one/several molecules ( ms_ ) or g_grob  
with the specified rotation matrix.
 Examples:
  
 rotate a_1. Rot({0. 0. 1.},30.)  # rotate by 30 degrees 
                                  # about Z-axis  
See also: interruptible background rotations and rocking movements.
 rotate  g_grobName  M_rotation
 rotate a graphics  object.
 Examples:
  
 read grob "oblate" 
 display g_oblate magenta 
 rotate g_oblate Rot({0. 0. 1.},30.) 
See also: interruptible background rotations and rocking movements. 
 
 rotate view M_rotation
 rotate view in the graphics window with respect to the screen axis  
X (horizontal), Y (vertical) and Z (perpendicular to the screen). 
This command is great for creating movies or demos when the graphics should 
be manipulated from a script.
 Example:
  
 build "alpha" 
 read trajectory "alpha" 
 display a_//ca,c,n 
 for i=1,100 
   load frame i 
   rotate view Rot({0. 1. 0.} , -1.) # rotate around Y by -1 deg.  
 endfor 
See also:
 rotate T_mol_column
 
rotate the 2D depiction of chemical structures in a .mol column of a table
of a chemical compounds.
 
 
 
 
 
 [ Select chemical | Select column table | select-3d-label ]Many ICM shell objects may have some parts selected 
in order to perform various actions on selected parts.
The select family of commands allows one to create/modify/remove selections
of ICM objects of subitems in ICM objects. 
The main select commands:
 
 select [off] [alignment | grob|iarray|map| matrix| profile| rarray| sarray| sequence| table..] [s_namePattern]
 
 (un)selects ICM objects with certain name pattern (or all), e.g. select grob "g_pocket*"
 
 select chemical ... 
 select patterns in  2D chemicals of a chemical table
 
 select alignment as
 
 select [dist|distance|hbond] as
 
 select treeArray center
 
 See also: 
 
 | Align/color/select chemical by pattern or other properties | 
 
 
This command can be used for:
 
Align 2D chemical by pattern ( with rotate option )
 
 select chemical chemarray {s_smarts|chempattern} rotate [index=i|I]
 
Select matched fragments(s) ( with all and/or append option)
 
 select chemical chemarray {s_smarts|chem} [all] [append] 
 
Color matched fragments ( with color option)
 
 select chemical chemarray {s_smarts|chem} color=s_color [all] [append] 
 
Use atom-level predicate s_filter to color/select individual atoms.
 
 select chemical chemarray filter=s_filter [append] [color=s_color]
 
s_filter should contain a logical expression which may use certain atom-level properties.
 
Mass - returns atomic mass
NofHeavyBonds - returns number of heavy neighbors
NofHydrogens - returns number of attached hydrogens 
Name - returns atom name
Color - returns currently assigned color
HBA - returns 1 if atom is hydrogen bond acceptor, 0 - otherwise
HBD - returns 1 if atom is hydrogen bond donor, 0 - otherwise
Chiral - returns 0 for non-chiral, 1 for S, 2 for R, 3 for undefined/racemic.
nRng - returns the number of rings atom is member of
Code - returns atomic number
IsOrganic - return 1 if atom is H,C,N,O,S,P,Se,F,Cl,Br,I. 0 - otherwise
Valency - returns atom's valency
Hyb - returns atom's hybridization state (possible values: 0,1,2,3)
AtomNum - returns atom's order number in connectivity table or smiles.
Aromatic - returns 1 if atom is aromatic, 0 - otherwise.
 
 
Examples:
 
 
add column t Chemical({ "CC1C=CC(C(NCCC(C=CC(S(NC(NC2CCCCC2)=O)(=O)=O)=C2)=C2)=O)=NC=1",\
 "C#CCN1C(=NC(c2ccc(cc2)S(N2CCCCC2)(=O)=O)=O)Sc2cccc(c12)[Cl]"})
# color all hydrogen bond acceptors 
select chemical t.mol "[O,S&v2,N&^2&X2,N&^1&X1,N&^3&X3]" all append color=lightblue 
# the same but using atom-level expressions
select chemical t.mol filter="HBA" color=lightblue 
# select all SP3 atoms
select chemical t.mol filter="Hyb==3" 
# color first atom of the first molcule
select chemical t.mol filter="AtomNum==1" color=red index=1
# color all hydrogen bond donors
select chemical t.mol "[!#6;!H0]" all color=lightred  
# align molecules by scaffold
select chemical t.mol "C(=C(C=CC1S(=O)(=O)[R2])[R1])C=1") rotate
# select all methyls and delete them
select chemical t.mol "[C;D1]" all
delete chemical selection t.mol 
See also: delete chemical selection find table
 
 
 | select columns in a table | 
 
 
 select column tab [only] [column selection [inverse]] 
 
  selects large groups of columns in GUI, handy for table with thousands of columns, helps to avoid excessive painful clicking.
 
Arguments and Options: 
only  : clears UI selection first
inverse  : invert the column selection.
 
 column_selection: 
 
no_arguments : select all columns
I_cols  : by an array of of column numbers, e.g. 3//5//7  or {1,3}
S_cols  : by an string array of column names, e.g. 'A'//'C'//'D'  (you may use the full name, e.g. 't.A' as well)
iarray and/or rarray and/or sarray and/or parray  : by keyword for column type
i_from :  select columns from number i_from to the end.
i_from>  ito : by column range  e.g. 1, or 3 10 
 
  add column t 1//1 ; add column t 2 3 4 5 6 "a" "b" 3.3 4.4
  select column t     # select all cols 
  select column t 4   # starting from column 4 
  select column t 4 6 inverse   # select all but columns 4,5,6
  select column t iarray rarray # select only numeric columns
  select column t 'A'//'B'      # explicit new names
 
  See also: delete column table, rename column table
 
 
 
 
 
 select [edit] 3d-label
 
graphically selects the specified label. It appears as a little green cross. The labels are considered as a subclass of
  graphical objects. 
 
Options: 
edit  : displays the label handle allowing to drag the label
 
See also:
 
 
 [ Set area | Set atom ball label | set atom | Set background image | set bfactor | set bond type | Set bond topology | Set cartesian | Set chain | set charge | set charge formal | set charge formal auto | Set chargemmff | set chiral | set chiral chemical | Set color | set comment | Set alternative atom | Set comment sequence | Setcomp_matrix | set directory | set drestraint | set drestraint type | set group column | Set hydrogen | set site | set site alignment | copy site | Set site residue | set slide | set tautomer | set texture | set error | Set field | Set field alignment | Set field map | Set field name | set font | Set font grob | Set foreground | Set format | Set grob | set key | set label | Set map | Set molcart | Set name | Set object | set occupancy | set plane | set pmf | set property | Set property column | set chemical view options | Set property alignment | Set randomize | set resolution | set stereo | set sstructure backbone | Set sstructure sequence | Set stack | set swiss | Set symmetry crystal | Set symmetry bio | Set symmetry | set table | Set terms | set selftether | set tether | Set tether append | Set type | Set type surface | Set type property | set object type | set molecule type | set type sequence | set type mmff | Set vwradii | Set vwelradii | Set view | set vrestraint | Set vrestraintvs_var | Setvs_var | Set variablegrid | Set window | Set xstick ]to change properties/attributes of existing icm-objects. 
 set area|atom ball|as ..|background|ball|bfactor|bond|cartesian|chain|charge|chiral|color|comment|comp_matrix|
 conf|
 directory|drestraint|edit|error|factor|field|font|foreground|formal|format|grob|group|header|hydrogen|
 index|key|label|link|map|menu|mmff|molcart|name|object|occupancy|plane|property .. |randomize|
 reflection|resolution|selftether|separator|sequence reverse|site|slide|sstructure|stack|stereo|stick|swiss|symmetry|
 table|tautomer|term|tether|texture|topology|torsion|tree|type|view arguments
 
Example:
  
 set bfactor a_//c* 20. 
 
 | set area sequence : positional factors for sequence alignment | 
 set area seq [ { R_factors |  r_factor } ]
 sets/resets a property array assigned to a sequence. Each amino acid can 
be assigned a relative solvent accessibility value for this residue in 
a three-dimensional model. 0. - fully buried (the highest possible factor), 
1. - fully exposed. 
These values can also be used to influence 
the alignment (buried residues with accessibilities close to zero will 
have larger contributions). The exact dependence residue-residue score factor  
on this value is defined by the accFunction array.
 set area rs [ { R_areas |  r_area } ] 
sets/resets an array or accessible area values (or value) to the residue selection. 
Note that for the residue areas contain absolute values (e.g. 84., 120., etc.) 
while for sequences (see above) the area/weight values are relative accessibilities in the range 
[0.,1.].  The maximal possible accessibilities are returned by the Area( rs_ type ) 
function.
 Example:
  
 read object s_icmhome+"crn.ob"
 show surface area 
 set area a_/asn Area(a_/asn type) # reset areas to maximal values 
 
 set area a_crn.m 0. 
 set area a_crn.m/ Random(0. 1. Nof(a_crn.m/)) 
 See also: accFunction , Align ( seq1  seq2 area )
 
 
 | set atom label or the ball radius | 
 
 
 set atom ball as R
sets custom balls to atoms. Can be returned with the Radius( as ) function
 
 set atom label as S
sets custom labels to atoms. Can be returned with the Label( as ) function
 
 
 
 (re)sets atom properties, such as atom presence ( on and off ) or coordinates
 
 set as on|off
activate (unhide) or inactivate (hide) atoms for energy and surface calculations.  
The inactive atoms can be shown in
graphics as shaded wire models. Example:   set a_//h* off ; Nof(a_// off) ; set a_//h* on 
By default all atoms are active. If a selection of atoms in 'off' or inactive, this state may also be added to the object stack with the store conf atom  obj_sel command. Be careful since the very first conf should also be added with the store conf atom .. command for this mechanism to work.
 
See also:  Nof(  on|off ), set atom ball label , store conf atom ..
 set as_Natoms M_3xN [mute]
 set as_Natoms M_3xN [mute]
# eg set a_W//vt1 Xyz(a_W//o)
 
 set as_tethered_inICMobj [tree] 
# follows tethers in this case the target coordinates are simply taken from the destination positions for the tethers.
 
 set as_one_vt1_atom_inICMobj [R_3xyz|M_3x1|as] 
 
 set as_nonICM_X as_ICMtetheredToX 
# used to update sdf/mol coordinates after optimization. 
this command is used to inherit the coordinate changes in a converted object with different order of heavy atoms.
Imagine the following scenario: 
 
The latter is achieved via the above set command.a mol file is read into a nonICM object, 
this object is converted with option tether (the order of heavy atoms may change)
the converted object is optimized and the heavy atom coordinates are changed
now there is a need to transfer the changed coordinates back to the source atoms in the nonICM object.
 
 set rs s_secondaryStruct # e.g. set a_/1:3 "HHH"
this command sets phi and psy angles of the selected residues in an ICM object according to the secondary structure
 
 set chain ms s_chainSymbol
 
With a single atom selection, ICM sets a given atom to the center  
of gravity of the corresponding molecule 
(no arguments), given point in space ( R_3Dvector argument ) or 
center of gravity of selected atoms ( as_select argument ).  
 If multiple atoms are selected, ICM sets the specified atoms to their new XYZ positions.  
The XYZ matrix can be returned by the Xyz (as_) function.
 
If multiple atoms are tethered the coordinates of the tethered atoms can be
set to the coordinates of the target atoms (see also minimize tether,
 superimpose and minimize "tz".
 Examples:
  
 build string "se ala his glu" 
 set a_/3/ca Matrix(Mean(Xyz(a_//ca)))  # 3rd Ca to the center of mass of all Ca s 
 set a_/3/ca Matrix({-3., 12., 14.5}) 
 
 set a_//vt1  # set the first virtual atom to the center of mass 
 randomize a_//vt1 0.1  # randomize the vt1 position in case of singularity 
For ICM molecular objects, in the most popular operation (set a_1//vt1) the 
first of the two virtual atoms (vt1) attached to the beginning of the selected molecule  
is set to the center of gravity of the same molecule.  
The purpose of this action is to simplify molecular rotation and translation  
via the first six free virtual variables.  
The tvt2 and tvt3 torsions and avt2 planar angle determine rotation  
of the whole molecule around the axes passing through the center of gravity.  
Useful for docking.
 Examples:
  
 read object s_icmhome+"complex.ob"
 set a_1//vt1            # now it is easy to rotate the 1st mol. 
                         # by changing tvt1  
 set a_2//vt1            # now it is easy to rotate the second molecule  
 set a_2//vt1 {1. 1. 1.} # move it to {1. 1. 1.} point  
# 
# Multiple molecules: let us set vt1 for all water molecules to oxygen 
# to fix the first 3 variable and keep the oxygen positions unchanged 
 read pdb "2ins" 
 convert 
 set a_w*//vt1 Xyz(a_w*//o) 
 fix v_w*//?vt1 
 mc v_w* 
See also:
 
 | set background image in graphics | 
 set background image bgimage full
 set background image bgimage exact center
 set background image bgimage exact [ origin=I_pos ] [ r_scaleCoeff ]
 
- set image as graphics background
 
With the exact option the image will be displayed in its own resolution. If center option is provided it will be centered,
otherwise you may specify the origin of the left bottom corner with origin option (default {0 0}) and/or scale coefficient.
Image created in this mode is drag-able and resize-able by mouse using 'drag-atom' mode.
 
With the full option the image is scaled to the maximum size when it still fits in the window 
Otherwise the image is scaled so that its central part fully covers the window without margins.
Aspect ratio of the image is preserved in all of the above cases.
 
 set background image off
 
- clear graphics background (remove any images assigned)
 
Examples:
  
 read image s_icmhome+"splash.png" 
 set background image album[ Nof(album) ]
 
 
 set bfactor  as  { r_NewFactor | R_NewFactors } 
 set bfactor  rs  R_NewResidueFactors
 set B-factors of selected atoms to a specified real value (or individual values). 
To assign individual b-factors, provide a real array with b-factors for each atom.  
To assign the individual b-factors at the residue level, provide matching 
residue selection and R_NewResidueFactors array.
 Examples:
  
 build string "ala his trp"  # also includes N- and C- terminal groups 
 set bfactor a_//* 20. 
 set bfactor a_//ca {20.,10.,30.}   # individual atomic factors 
 set bfactor a_/2:18/ca,c,n 10. 
 set bfactor a_/* {10.,20.,30.} # individual residue factors 
 
 set bond type as_class1 [ as_class2 ] { i_type }
 set the bond chemical type:
0 - undefined, 1 single, 2 double, 3 triple, 4 aromatic,9 quadruple,10 amide bond. 
The amide bond is between a carbonyl (C=O) and a nitrogen, for example a peptide bond.
 set bond auto ms
 with the auto option the command automatically reassigns patterns of single and double bonds.   
It performs the following operations:
  
identify aromatic rings in object os_ from patterns of single and double 
bonds. Use preference wireStyle = "chemistry" (Ctrl-L) to see the 
 bond types. This is done automatically  upon reading of objects, mol and mol2 
files if logical l_readMolArom is set to yes. 
for ICM objects, set ICM bond variable types according to bond chemical 
type, atom types and distance between them 
 Example:
  
 read pdb "1crn" 
 display 
 wireStyle="chemistry" 
 set bond type a_//c a_//o 2 # double        # standard bonds in a/acids 
 set bond type a_/phe,tyr,trp/[cn][gdez]* | a_/arg/cz*,nh* 4 # aromatic 
 set bond type a_/as?/cg*,od,od1 | a_/gl?/cd*,oe,oe1 2  
 build hydrogen a_/A 
 
See also:
 set bond topology
 
 
 | Transfer chemical structure, formal charges and bonds (or atom names), from smiles or a chemical. | 
 
 
 set bond topology as_ [smiles|chem1 [label]]
 
The bond orders and formal charges for a molecule in  object can be modified according to the smiles string or a chemical if they match
topologically (i.e. without consideration of bond orders and formal charges). 
  Arguments:
 
The command works as follows:as_ atom selection in an ICM or non ICM object, it can also be a selection of different level rs_, ms_ or os_ .
smiles string with the new bond orders and formal charges, e.g. "C1[N+]CCCC1" for a charged piperedine.
chem1 a chemical parray with one chemical in it, it can be read from a mol or sdf file, e.g. read mol table "myNewChemStruct.sdf"
label : option to transfer atom names from a 2D chemical along with bonds and charges. The atom names can be set in 2D editor with right-click and choosing
 "Edit Atom Label" item. They can be viewed by choosing View/Show full atom names in the View menu.  The atom names are stored in the .sdf format
as M  ZZC  records (e.g. M  ZZC   3 cg).
 
To apply thie command to an ICM object follow these steps:a substructure match without formal charges and bond orders is performed in all molecules and atoms selected (both ICM and non-ICM objects can be treated, but the hydrogens are adjusted only in non-ICM ones)
only the 1st match is considered in case of multiple matches of a smiles string or a chemical. The command was meant to fix the whole molecule
the bond orders and formal charges from the first match are transferred to the selection.
 
strip os_  reduce the object to a non-ICM type
set bond topology ms_ s_newSmiles  # will fix hydrogens in the changed areas
use convert2Dto3D or 3Dto3D macros if you want to change geometry or do it in the Ligand Editor.
 
 set bond topology ms_hetero|as_hetero auto 
 
guesses bond orders from coordinates (hybridization and angles) but only for molecules of non-ICM type marked as HETATM ( type 'H' )
 
 | set cartesian : imposing ring templates | 
 
 
 set cartesian os [ X_3D_chem_templates ]
 
By default this command is trying to find chemical matches of the selected object with
a set of 3D molecules in a template_3D.sdf file ( $ICMHOME directory ) and sets coordinates to 
the template if a match is found. The file can be modified, or one can use your own external set of
templates as the X_3D_chem_templates array . Example:
 
 read mol s_icmhome+"template_3D.sdf" 1
 set cartesian a_
This command is used in the convert2Dto3D macro. 
 
 
 
 
 
 set chain ms_molecules chainSymbol
 
sets the chain character to the selected molecules. Only the first character of the
string is used as the chain identifier. If the chain character is not set is kept as the space 
symbol (' ') but is shown and can be selected as underscore (_) .
 
Example:
 
read object s_icmhome+"complex.ob"
set chain a_* " "   # clean up
show a_C_  # all molecules have blank chain character
set chain a_2 "A"
set chain a_1 "B"
show a_CAB
 
 
 set charge  as_select { r_NewCharge | add r_Increment }
 sets or increments partial electric charges of selected atoms to or 
by specified real value, respectively.
 set charge as_select { R_NewChargeArray |  add R_ArrayOfIncrements }
 sets or increments partial electric charges of selected atoms to or 
by a specified real array.  
The array assignment is useful for saving and restoring the charges.
 Examples:
  
 set charge a_//* 0. 
 
 set charge a_/lys/nz | a_/arg/cz  1.0 
 
 set charge a_/asp/od* | a_/glu/oe*  -0.5 
 
 oldCrg=Charge(a_//*) 
 set charge a_//* 0.0 
 set charge a_/asp/od* | a_/glu/oe*  add -0.5 
# do something with these simplified charges 
 set charge a_//* oldCrg 
See also: set charge formal, set charge mmff . 
 
 set charge formal as_select r_NewFormalCharge
 sets formal partial electric charges of selected atoms to or by a specified real value.  
The charge will be rounded to the nearest value proportional to 1/12th. 
The following values are common: +-N, +-N/2., +- N/3., +-N/4., +-N/6. 
Note that the formal charge can not be arbitrarily changed without appropriate 
changes in the surrounding bond types. 
The formal charge will be considered by the Smiles function.
 Example:
  
 read object s_icmhome+"crn.ob"
 set charge formal a_//n -0.333   # a formal charge of -1/3.  
See also:  
 set charge formal auto, set charge, set charge mmff . 
 
 
 
assigns formal charges according to pKa base and acids model.
 
 set charge formal auto X_chem_array|ms_sel r_pH(7.0)
 
Example:
 
read table mol "t.sdf" name="t"
set charge formal auto t.mol 7.0   # charge at pH=7
 
Note: this command support nProc option for parallelization.
 
displaying pKa values for chemicals: 
add column t Chemical({"CCCCN","CCCNCCC","C(=O)O","CC(=O)O","CCC(=O)O"}) # we need a chemical table
# here is the action on table t
add column t Predict( t.mol "MolpKaBase" ) name="pkab"
add column t Predict( t.mol "MolpKaAcid" ) name="pkaa"
set label t.mol t.pkab window= {0.,14.} 
set label t.mol t.pkaa window= {0.,14.}
set format t.mol comment = "only the lowest number is significant"
 
 set charge mmff as_select
 set atomic charges according to the rules described  
in a series of  publications on the Merck Molecular Force Field  
abbreviated as MMFF94 or just MMFF.
 This command requires the mmff atom types (see the set type mmff command).  
Do not be surprised that the methyl groups have zero partial charges.  
That is how they are defined in the MMFF algorithm. This command is automatically execute
if you specify option charge in the set type mmff command.
 Example:
  
 read object s_icmhome+"crn.ob"
 set type mmff       # mmff atom types 
 show atom type mmff 
 set charge mmff     # charges  
# 
 read mol s_icmhome+"ex_mol.mol"
 for i=2,Nof( object ) 
   set object a_$i. 
   display 
   build hydrogen 
   convert  
   set charge mmff 
   display ball 
   color a_//* Charge(a_//*)//{-1., 1.} ball 
 endfor 
See also: set charge, set charge mmff .
 
 
 
 set chiral as [ 0|1|2|3 ]
set a chiral flag for the selected atoms. 
The meaning of the flag:
 
0 chirality is not set
1 R-chirality
2 S-chirality
3 a racemic mixture of two chiral isomers
 
If no explicit integer flag is specified
the program will automatically assign the flag from the local geometry and topology.
 
 
 
 
 set chiral chemarray [off|inverse]
 
 
off : converts all chiral centers to racemic
inverse : inverts chirality 
 
 
 
 | set color directly and without graphics | 
 
 
 set color site [color] seq1 seq2 ..    
 
 set color atom_representation_or_label as color
 
 set color ribbon|base|{residue label} rs color
 
Allowed atom representations:
 
wirestickballxstickcpkskinsurfacesiteatom labelvariable label 
The set color command is equivalent in action to the color full command (e.g. color a_*. full alignment ). Option full allows one to set colors regardless of the display status.
 
Coloring sequence alignments 
 set color alignment [{i_color_Schema_Num|s_color_SchemaName}]
 
Sets alignment coloring schema. If no schema number is provided then default will be set.
To modify existing color schemes or introduces new ones you have three different options:
 
modify the content of the CONSENSUSCOLOR.tabfile
color alignment dynamically by the set color alig R s_rainbow  command
set a named numeric field to each position in the alignment with the set field alig s_field i_fieldNumber (1,2,3) R   and choose the field from the Color combo.
 
 set color alignment R_values [s_rainbow]
 
 The R_aliPosValues can be calculated set for each position of the alignment or assigned from sequences via the  Rarray( R_prop ali seq )  projection function.
 
Note that s_rainbow will redefine the GRAPHICS.alignmentRainbow variable.
 
Optionally, you can provide minimum and maximum values as an extra two elements of the array: Trim(R, a,b)//a//b
 
Example:
 
read binary alignment s_icmhome+ "example_alignment.icb"
set color alig "icm-combo"
set color alig   # default 'consensus-strength' will be set
set color alig Rarray(Count(Length(alig)))  # by default rainbow
set color alig Rarray(200,1.)//Rarray(176,2.) "pink/white/yellow/lightblue"
 
Setting color by user-defined field. set field alig s_field_name i_fieldNumber (1|2|3) R_colors 
 these colors are controlled by the GRAPHICS.alignmentRainbow string
s_color_SchemaName can also be a name of the field set in set field command
 
Example:
 
read binary alignment s_icmhome+ "example_alignment.icb"
GRAPHICS.alignmentRainbow = "pink/white/lightblue/yellowgreen"
set field alig 1 "random_colors" Random(0., 1., Length(alig) )  # 1st user field
set color alig "random_colors" # or select Color from GUI
 
See also: color , GRAPHICS.alignmentRainbow , 
 
 
 
 
 set comment [ append ]  os_Object s_comment 
 
 set comment ms|rs s_comment 
 set a text comment string (or a long name) to object, molecule(s) or residue(s). 
This annotation is preserved in the 
 read object and write object commands.
 Examples:
  
 read object s_icmhome+"crn.ob"   
 set comment append a_ "\n The template for modeling\n Energy minimized\n"  
 build smiles "CCO"
 set comment a_1 "ethanol"
 
 set comment conf [os] s_comment i_conf
 
sets a comment string to the stack's conformation.
 
Example:
 
build string "ASD"
store conf a_
set comment conf a_ 1 "initial conf" 
 
See also: Name conf store conf
 
 
 
See also: set comment s_alterSymbol as , Namex function
 
 | set a flag of an alternative atom position | 
 
 
 set comment s_charAlterSymbol  as_alterAtoms 
 set alternative status to the selected atoms (e.g. set comment a_//Aa " " ,to clear 
the alternative flag).  The alternative flag can be read from a pdb file.  
This flag marks alternative geometrical positions of atoms which are described  
in the previous ATOM records.   
For example, the same side-chain or a water molecule can occupy several positions.  
The symbol of alternative position (usually 'a','b' or 'c' character,  
since ICM converts the strings to low case) precedes the residue name field. 
The alternative positions can also be selected with the  a_//A alterChar selection.
 Example:
  
 read pdb "1cbn" # has alternative positions  
 show a_//Ab     # show alternative pos. 'b' 
 set comment a_//Aa "x" # rename 'a' positions to 'x' 
# 
# example in which we delete all secondary alternatives and  
# clear the alternative-flag from the main alternative  
# 
 read pdb "1hyt" 
 set comment a_//Aa " "  # cleared the main alternative 
 delete a_//A            # delete atoms with any alter-symbols, eg b,c,2,3 etc. 
 
 
 | set comment to a sequence | 
 set comment [ append ]  seq  s_comment
 set comment to a sequence.  This sequence comment can be extracted with the Namex( seq )
command.
 Example:
  
 a=Sequence("AFSGDHAGSFDSGAHGSDFASGDA") 
 set comment a "a random test sequence" 
See also:  SEQUENCE.restoreOrigNames
 
 | set comp_matrix: redefine residue comparison matrix. | 
 set comp_matrix [ add ]  r_increment [ s_ijPattern ]
 change the numbers in the  residue comparison matrix, called comp_matrix 
by a number typically between 0. and 0.2. This may be very important for generating 
a reasonable alignment for sequences with low sequence similarity.  
The result is similar to reducing the gapOpen parameter by about 0.1.
 Examples:
  
 set comp_matrix add 0.05  # try to Align( ) again  
 set comp_matrix 10. "CC"  # make C-C alignment really important 
 set comp_matrix add 1. "[KR][KR]" 
                           # downweight alignment of Gly against 
                           # all the residues 
 set comp_matrix add -.4 "G?" 
 set comp_matrix 0. "[AGS][AGSLI]" 
 
 set directory  s_newDirectory
 change the current working directory from inside the icm-shell.  
We recommend using: alias cd set directory "$1" . 
In this case you can change directory in the Unix/DOS style.
 Example:
  
 make directory "/usr/tmp" # create a new directory 
 set directory "/usr/tmp"   
 cd ..    # uses alias from _aliases.  
# cd .. is equivalent to set directory ".." 
 show Path(directory) 
 See also: make directory, delete directory, Path(directory)
 
 
 Set a distance restraint between two atoms, or two equal size array of atoms
 
 set drestraint  as_atom1  as_atom2  i_DrestraintType | R3_low_upper_weight 
 
Set a distance restraint from interatomic distances  
 set drestraint  distpairs [os_ICM] [i_cntype] [only] [find [edit]] [l_info=no]
 
Distances (connections) between two atoms (see distance) can be established from the interface or make distance command pairs of atoms can be created with a make distance command.  
The convenience of this command is that this object can be easily created interactively and drestraints can be directly created based on the atom pairs of this distance-object. 
 
 Prerequisites: 
an ICM object for distance restraints  (note that drestraints could only be implsed between atoms
of the same ICM object)
a distance object ( you can find it in the ICM with the list parray command, usually the collection of distances is called distpairs )
the distances do not need to be between the atoms of the target ICM object. It is sufficient that the atoms mentioned in the distpairs object have the same cartesian coordinates as the target atoms (see the find option). 
 
 Arguments and Options:
 
| Argument | Default | Definition or Comment | 
|---|
 | distpairs | none | a set of atom pairs, the current distances are not used, just the atoms |  | os_ICM | current object of ICM type | this object must contain |  | i_cntype | commands finds a type for a close contact between the two atoms | drestraint type defining its parameters. Use show drestraint type to see the predefined types, set a new type if necessary. |  | R3_lw_up_wt | sets simple typeless harmonic drestraints | Alternative to the i_cntype . Example: 0.//0.//1.  or 0.//3.//10. |  | only| | delete all drestraints that previously existed in the object |  | find [edit] |  | finds atoms in the specified target object or current object with the same coordinates as the distpairs atoms. With the edit option ICM requires the source atoms to be between ligand and receptor. |  | l_info=no | current value in the shell | to suppress the output, you may also use l_warn=no to suppress warnings |  
 ActionIdentifies atoms in the distance object, finds the same atoms in the os_ICM ( option find ) or
uses only atom pairs in a_*.LIG molecule and a_REC. object and sets a distance restraint between them.
If the type is not specified with the i_cntype parameters, the type is found automatically achieve a van der Waals contact between two atoms in question. 
 Output
 
Option all . Set a distance restraint between two groups of atoms ( NMR ) 
 set drestraint all  as_atomGroup1  as_atomGroup2  i_DrestraintType 
 sets distance restraints of specified type between selected sets. 
Drestraint types (integer numbers) can be either read from a *.cnt 
type file or set directly by the set drestraint type 
command and shown by the show drestraint type command.
 
Setting NMR-style group restraints and with R-6 averaging. 
Suppose that you have an NMR restraint (with weight 10., and bounds 3. and 4. )  between hydrogens belonging to a group, e.g. 
hb1,hb2 or hb3 of alanine2  and ha1 or ha2 of a glycine10. In this case you can use these commands:
 
read object s_icmhome+"crn.ob"
set drestraint type 1 10. 3. 4.
set drestraint all a_/2/hb* a_/10/ha* 1  # type 1
 # Info> one multicenter (3x2) dist. restraint imposed
show energy "cn"  # gives you the penalty value
set terms "cn"
minimize  # minimizes the multi-center restraint
 
Option all allows you to generate a multicenter restraint. Later, the penalty of 
this restraint will be calculated by finding an averaging the inverse six powers
of all possible cross-distances between the two groups.
 
Two methods for averaging are available, see the cnMethodAverage preference.
 Important: Drestraints can only be imposed on real atoms, the virtual atoms such as vt1,--vt2 
are ignored in the cn calculation, therefore the set drestraint a_1//vt1 a_2//vt2 5   
command is INCORRECT.
 Examples:
  
 set drestraint a_/15/ca a_/18/ca 5     # distance restraint of type 5  
 set drestraint type 2. 4. 5.; set drestraint i_2out a_/15/ca a_/18/ca 
    # define new type (i_2out) and set it  
 
 set drestraint type [ i_DrestraintTypeNumber ] r_WeightingFactor r_LowerBound  r_UpperBound [ local  r_Sharpness ]
 creates a distance restraints type. 
Drestraint types (integer numbers) can also be read from a *.cnt 
type file and command and shown by the show drestraint type command.
 
If the type number is not specified, it is set automatically and returned in i_2out .
 Examples:
  
# type 11, weight 10., bounds [1.,3.]A
 set drestraint type 11 10. 1. 3. 
 
# local type, sharpness 5. 
 set drestraint type 12 10. 1. 3. local 5.   
# automated type
 set drestraint type 10. 1. 3. local 5.  # returns in i_2out
 set drestraint i_2out a_/2/ca a_/4/ca
 
 
 
 
 set group column tableColumn [off]
 
this command is applied to a sorted column in a table changes the view of a table. All the rows with identical cell values for this column are merged into
families and the right arrow click is enabled to rotate over the
the family members. Use option off to disable this mode.
 
Example:
 
group table t {1 2 2 3 3 3} {1.1 2.2 3.3 4.4 5.5 6.6}
set group column t.A  # watch the result in GUI, use arrows
 
 
 
 | set hydrogen : re-calculating coordinates of hydrogens from the connected heavy atoms | 
 
 
 set hydrogen [as]
 
This command does not create hydrogens, it takes the existing hydrogens and re-calculates their
cartesian coordinates from the corresponding heavy atoms.
 
 Warnings: 
the hydrogen placement by this command is not optimized (see minimize cartesian ). 
The previously optimized positions of hydrogens may be moved to sub-optimal positions 
by this command. This command is best used to create reasonable initial positions for hydrogens
after the heavy atom coordinates are re-set.
 
See also: set atom , build hydrogen .
 
 
 set site [ only ] seq I_positions s_siteString [type="SITE"]
 
 set site [ only ] seq s_swissprotSiteString  
 
 set-site [ only ] {ms|seq} [seq_from [ali]] 
 
 set-site [ only ] ms swiss   # find a_P uniprot parent sequences and use them
 
 set site [ only ] [display] rs  s_siteString [label=0-4] [type="SITE"] 
 
 set site distance ms [ r_siteArrowLength (0.) ] 
 
 set site ali column=I_pos color=I_rgb type=s_regionType comment=s_text|S_labels
 set site to with the specified positions and comment. 
The default action is append . Option only erases 
all site information before setting a new one.
 
If the string is specified, create a new site according to the 
provided legal site string s_siteString (e.g. "FT ACT_SITE 15 15 Catalytic residue"). 
The format of the site string is the same as in the swissprot sequence entries.  
The list of legal site types is given in the Glossary. 
 The site residues in objects can be delete with the delete site command and 
 selected with the a_/F SiteCodes  selection, 
(e.g. a_/FAB selects residues involved in binging and active site).
 
Option label= sets local SITE.labelStyle . Value 0 means 'unset'.
 
The distance option allows one to set the length of the site arrow. The default is zero.
Caution: the set site distance command will re-set all site arrow lengths in a current molecule.
 
Example:
  
 read sequence s_icmhome+"s.seq" 
 set site sss "FT ACT_SITE 15 15 active site residue"  
 set site sss {10,15,16,17} "Site1: active site" 
 # the residues of this site can be selected as a_/F"Site1*" 
#
 read pdb "2abx"
 readUniprot "NXL1A_BUNMU"
 set a_a swiss "NXL1A_BUNMU"
 set site a_P swiss
See also: copy site, delete site, showsite{show site} and color site.
 
 
 set site ali {icol(1) [,jseq(1), [,ncol(1),[nseq]]]} [column[=I_cols]] [comment=s|S] [type='SHADE'|'BOX'|'FNT'|'FNT_BLD'|'REGION'|'REGION_VERTICAL'] [color=..]
 
 set site ali column=I_pos color=I_rgb type="REGION"|"REGION_VERTICAL" comment=s_text
 set site ali column=I_2pos color=I_rgb type="DISULFIDE" comment=s_text
 
annotates a region in the alignment. 
 
Example:
 
  set site alig column={4,5,6,7,8} type="REGION" comment="text"  # sets upper region annotation for columns 4-8
  set site alig {10,2,5,5} type="BOX" color=red  # draw the box at row=2, col=10 size=5x5 border color red
# more elaborate labels of different size
  marks={'Circle','Circle_large','DTriangle','Diamond','Cross','DiagCross','UTriangle','LTriangle','RTriangle','Pentagon','Hexagon'}
  marks_siz = marks + "_"+ (Count(marks)*5 + 20)
  set site alig column=Count(10) type="REGION_VERTICAL" color={0,120,230} comment=marks_siz
Arguments:
 
column= iarray or positions according to the first sequence, e.g. column={10,230,260}. For the 'DISULFIDE' type
type= 'SHADE', or 'BOX', or 'FNT' or bold font, 'FNT_BLD', or 'REGION', or 'REGION_VERTICAL', or 'GLYCOSYLATION', or'DISULFIDE' (requires two integers in column= argument)
  'FNT' or 'FNT_BLD' means color the aligned amino acids fonts by the specified color
color=| , e.g. "#FF0122", or {128,0,0}
comment= | , or a string with one of the following fixed mark types
 
Mark types for the comment= argument. Note that the size of the mark (range from 1 to 100 for the max size) can be specified after the mark type in the following style, e.g.
 type="Circle_85"
 
'Circle'
'Circle_large'
'DTriangle'
'Diamond'
'Cross'
'DiagCross'
'UTriangle'
'LTriangle'
'RTriangle'
'Pentagon'
'Hexagon'
 
 
 
Example (annotate binding sites, and then delete all of them)
 
  read binary s_icmhome + "example_alignment.icb"
  set site alig column=Index( alig, Sphere( a_H [1] a_A 4. ) ) type="BOX" color=red
  delete site alig
 
See also: delete site alignment
 
 
 copy site [ only ] { seq_to | ms_to } seq_from [ ali ]
 transfer (or reassign) sites from a sequence or string  
to a destination sequence seq_to or a  selection of molecules ms_to . 
Sites are listed in feature tables of swissprot entries and are read by the 
 read sequence swiss command.
 If alignment is not provided, the sequences will be automatically 
aligned to find residue-residue correspondences and the reliability of 
the alignment will be reported.  
If the source of sites is not provided the sites 
will be transferred from the sequences linked to objects.  
The list of sites and their one-letter codes is given below.  
Normally this command appends to the list of existing sites, unless the only option  
is given in which case the old sites are dismissed.
 
The effort is made to avoid repetition and retain only the unique set of sites. 
Identical site will not be added, e.g. simply repeating the same copy site command
will not duplicate the number of sites. 
 
Example:
 
 readUniprot "PIM1_HUMAN"
 read pdb "1xws"
 make sequence a_1.1
 a=Align(PIM1_HUMAN,1xws_a)
 copy site PIM1_HUMAN 1xws_a
 Info> 8 sites (i_out) appended to 1xws_a
 copy site PIM1_HUMAN 1xws_a  # repeat
 Info> 0 sites (i_out) appended to 1xws_a
 See also:
 
 | set site to a residue selection | 
 
 
 set site [ only ]  rs  s_sideString 
 assign sites to a molecular 3D object (simpler than the previous Swissprot-like 
definition).
 Example:
  
 read object s_icmhome+ "crn.ob" 
 set site a_/10:13 "candidates for mutagenesis" 
 
 
 
 
 set slide name slideArray s_oldname s_newname
 
Rename object names referenced in a slide array. Useful when an object is renamed after making a slide.
 
Example
 
nice "1crn"
add slide
rename a_1crn. "crambin"
display slide index=1
set slide name slideshow.slides "1crn" "crambin"
display slide index=1
 
See also: slide
 
 
 
 
  set tautomer ms i_tau
 
  set tautomer rs_his i_tau_1_or_2 | "hid" |"hie" |"hip"
 
switches between different tautomers of small molecules ms or histidine  rs_his by relative tautomer number or histidine tautomer name.
The states and necessary hydrogens are built/set by the build tautomer command.
 
Example: 
 
build string "AHW"
build tautomer a_/his # adds a hydrogen and hydrogen masks to allow the switching
set tautomer a_/his 2
 
See also: build tautomer
 
 
 
 set texture grob imageArray
 
updates textures used in the grob. Textures should be in the order provided by the Image command.
Common usage would be: get textures, modify them in ICM, and assign them back to grob.
 
See also: Image
 
Example:
 
read grob "g.obj"
I = Image( g texture )
I = Image( I 256 256 ) # rescale all images
set texture g I # update images used for textures
 
 
 
 
 
 
 set error
 
sets the icm-shell error flag. The flag is returned (and cleared) with the Error() function.
Example:
 
if Nof(Getarg(name))==0 set error
a=Getarg("t",2)
if Error() then
  print "Help"
endif
 
 | set field  by number or name | 
 
 
Each object, molecule, residue or atom have a place to store numbers. This place is called a field and has a reference number.
In addition, atoms have named fields that can store numbers or text. Also, user fields can be stored in sequence alignments  (see the last section of this page)
 
Setting a named field in molecular objects 
 set field name= s_fieldName as|rs|ms|os { r|i|s_FieldValue | R|I|S_arrayOfValues } 
 
 See the description  below  , as well as the Field and Select functions.
 
Setting field in molecular objects by number 
 set field as|rs|ms|os { r_FieldValue | R_arrayOfValues } [ number= i_fieldNumber ]  
 set field clear as|rs|ms|os [ number= i_fieldNumber ]
 set user-defined values to atoms, residues, molecules or objects selected. 
Atoms have one user-field, residues have three, molecules and objects have sixteen.  
To specify which field you need to set, use the number= option.
 To extract the property use Field ( selection, i_fieldNumber ) function.
 
  
| Level | Max.Nof_fields | example | 
|---|
 | Atom | 1 | set field a_//c* Mass(a_//c*) |  | Residue | 3 | set field a_/trp 1. number=2 |  | Molecule | 16 | set field a_W Random(1.,10.,Nof(a_W)) number=12 |  | Object | 16 | set field a_*. Rarray(Count(Nof(a_*.))) |  User defined fields can further be 2D or 3D averaged with the Smooth function and 
selected by with the Select function.
 
 
 | Setting a user field in an alignment | 
 
 
 set field ali i_vectorNumber (1 or 2) [R_aliPosValues] [s_name] 
 
Stores rarray of values for each position of the alignment into a user field i_vectorNumber (allowed values are 1 or 2).  Each alignment has 2 reserved vectors that
may be used for different purposes (e.g. a plot on top of the alignment). 
 
See also:
 set color alig_n R_n 
# to set custom colors
 
 
 | set atomic field from a map | 
 
 
 set field map [as] [name=s_field_name]
 
sets the interpolated value from a map to an atom according to the coordinates of its center.
Example:
 
loadEDS "3pah" 0. # loads m_3pah crystallographic 2Fo-Fc map for epinephrine
read pdb "3pah"
set field m_3pah 
set field a_// name="eds" Field(a_//)
display 
set label atom a_// Sarray(Iarray(100.*Field(a_//)))
display ball Select(a_// "eds<0.4" )
center a_aale
 
 
 
 set field name=s_name as|rs|ms|os { i_value|r_value|s_value|I_values|R_values|S_values }
 
Example:
 
set field a_//o* name="Occ" Occupancy( a_//o* )
Field( a_//o* "Occ" )
Name( a_// field ) # returns {"Occ"} 
This field can be manipulated with the following commands and functions
 
Field (  as | rs | ms | os   s_tag  ) returns the field value
Select(  as | rs | ms | os   s_tag  ) returns the atoms for which the field is set
Select(  as  | rs | ms | os  s_tag_condition  ) returns the atoms/residues/molecules/objects for which the field is set and the condition is met
delete field [ as | rs .. ]  s_tag    deletes the field from some atoms or all the atoms by default
Name( as  | rs | ms | os field )    returns a unique list of assigned tag names at the appropriate selection level
 
Example 1:
 
 build string "ala"
 set field name="my" a_//c* Count(Nof(a_//c*))  # set values 1,2,3,.. to carbons
 Select( a_// "my" )
 Select( a_// "my==1" )
 delete field name="my"
 
 Named fields with text
 
build string "AHW"
set field name="na" a_//n*,c* Name( a_//n*,c* )  # store some atom names in field named "na"
show Field( a_//n*,c* "na")   # returns the value
Select( a_// "na" )  # select atoms with that field set, namely n*,c*
Select( a_// "na==n" )  # select atoms with that field equal to "n"
Select( a_// "na~ca*" ) # fuzzy comparison
Select( a_// "na~c*" ) 
 
Action upon double clicking an atom . 
An action can be assigned to a field with a fixed name doubleClick . The atom selection for the action should be coded as dollar-1 ( $1 ).
A simple action can be just like that:
 
set field a_// "display cpk $1" name="doubleClick"
 
A toggle can also be easily implemented with a few ICM commands.
Example in chick double click toggles the display of bfactors and non-standard occupancies:
 
a1 = "atomLabelStyle=8; if Nof( $1 & a_*.//DA )==0 then; display atom label $1 ; else; undisplay label $1; endif"
set field a_// a1 name="doubleClick"
 
It may be move convenient to write the toggle expression in a macro, e.g.
 
macro toggleBfactorDisplay as_
  atomLabelStyle=8
  if Nof( as_ & a_*.//DA )==0 then
    display atom label as_ 
  else
    undisplay label as_ 
  endif
endmacro
and them use the macro in
set field a_// "toggleBfactorDisplay $1" name="doubleClick"
 
 
 
 
 [ Font specification ]set font [ { atom | residue | variable } ] [ auxiliary ] [ bold ] [ italic ] [ underline ] size=i_Size font=s_FontName 
set current font for atom-, residue-, variable-, or string- labels 
in the graphics window. Strings can be displayed in either their main 
font or the auxiliary one (option auxiliary ). The following 
fonts: times, helvetica, courier and symbol, should be available. 
Default fonts are defined in the icm.clr file. 
 
Examples:
  
 set font 28 times        # 'Times' font, size 28  
# 
 build string "se his" 
 atomLabelStyle="[C]" 
 display wire atom label 
 set font atom 14 bold    # for atom labels  
# 
 set font auxiliary bold italic symbol 28 
 
 | specifying the font in ICM | 
 
 
A few ICM commands use similar parameters to specify the font used in graphics window:
 
 [ bold ] [ italic ] [ underline ] size=i_Size font=s_FontName 
 
Font families supported by the font option:
 
| "mono", "courier" | a standard monospace font |  | "serif", "times" | a standard serif font |  | "sans", "arial", "helvetica" | a standard sans serif font |  | "symbol" | font with special symbols and Greek letters |  
See also: set font, set font grob, set label 3d label, display string.
 
 set font g_label [font_spec] [color_spec]
 
sets/resets font for a particular 3D label (technically it is a grob with a single point and
associated text). 
 
See font specification format and 
color format for explanation of the font_spec and color_spec parameters.
 
Example:
 
#label3d = Grob("label",Mean(Xyz(a_/3,4)),"3D label for res 3,4")
label3d = Grob( "label", {0. 0. 0.}, "HELLO WORLD!" )
set font label3d font="times" size=36 rgb="#00ffdd"
display label3d
select edit label3d # makes it movable, press Esc to get rid of the cursor
 
 | Make an alignment , an html document, or a table active. | 
 
 
 set foreground  s_htmlVarName | aliName | tableName
 
Bring the specified GUI panel for the foreground, i.e. make an alignment , an html document, or a table active.
 
Examples:
 
set foreground s_html s_anchor
set foreground ali
set foreground tab
 
 set foreground center {table|html|alignment|graphic}
 
Brings the specified class of GUI objects into the central part of the main window
 
Example:
 
display new  # creates an empty 3D window
add column t {1 2 3 } # creates a table
set foreground center table   # moves table pane to the center
See also:  Name( foreground table|alignment|html ) to get the names of those shell objects
 
 
 | set format for a table column | 
 
 
 set format I|R|S|P_column [i_width] [s_format|html|web] [function=s] [filter=s] [name=s_cname] [color=s] [pattern=s] [show [off]]
 
 set format T_table ..same args and action on ALL COLumns.. [table|view|grid] [show [off]]
 
 set format I|R|S|P_column k_collectionFormat # eg .. t.A Collection(t.B format) 
 
 
Set various display, action and auto-calculation properties for table column or all columns of a table. All the set fields can also be extracted into a single collection with named members, modified and reset back to a table of table columns. 
Note set format enables setting actions for a particular cells, while add header tab.doubleClick  action (or cursor) does it for rows.
 
 
width - column width in pixels
s_format - string containing html tags formating for the column cell.
  Use %1 for reference to a cell value. E.g: "%1" display values as bold. For real values the number of digits
  can be adjusted using "%.n[fge]" format. Where n is precision, 'f' - decimal notation, 'g' - exponent notation, 'g' - mixed.
  E.g: "%.2f" - two digits after dot.
  
  The s_format string may contain internal ICM html links (see gui programming} which allows one to bind any custom action to them. It can contain the value of the cell itself ( %1 ) or values from other columns, e.g. %@.anothercol[%#] (note that %@ is table name and %# is row number). 
  The s_format string may contain a regular expression and assign a certain html style of a cell according for the matched fields, e.g.
 
set format t.A "(.*?):(.*?);;<b>\\1</b>:\\2"     # ;; separates regular expression to match and expression for replace   (\\1 \\2 - back-references to insert texts from corresponding brackets )
set format t.A "(.*?):(.*?);;<span style=\"color:#d15b0e\">\\1</span> <span>\\2</span>"
set format t.A "%J"  # a shortcut for the previous expression
Examples of different set format expressions: 
read pdb "3zzz"
cool a_
add column t Name( a_A full )
set format t.A "<!--icmscript name=\"1\"\n center %@.%^[%#]\n--><a href=#_>%1</a>" 
The following shortcuts are allowed: 
 %@ is the table name, e.g. %@.%^ is table.column
 %# is the line/row  number, e.g. t.mol[%#]
 %^ is the column name corresponging to the cell.
The following expressions are equivalent initially but have their particularities: 
 %1  - cell value of the clicked column (safe) %A  - cell value of column A. Can refer to the current row value of any collumn butside effects are possible depending on the first letter of the column name. E.g. for %n %f %d and some others may be interpreted as format, safer to use the following expression (see the next item)  %@.A[%#] - cell value of any column and current row (safe) %@.%^[%#] - cell value of current table.current column[current row]. name=s_displayName use custom name as column name on GUI
color=s_colorSpec a conditional expression which can used for custom cell coloring. (see example below)
  The expression has the following syntax:
   condition ? result_if_true : result_if_false 
  result_if_true and result_if_false themselves can contain conditions (be recursive) 
  The condition may use number and string constants as well table column names. E.g: MW < 100
  The returned values should be a string containing either name of the color ('lightred') or html hex notation ('#BAFFBA')
pattern=s_fillPatternSpec a conditional expression which can used for custom cell coloring. (see example below)
  The same syntax as color expression above. The returned string should be one of the following values:
    
      'SolidPattern'    'HorPattern'      'VerPattern'      'CrossPattern'    'BDiagPattern'    'FDiagPattern'    'DiagCrossPattern''Dense1Pattern'   'Dense2Pattern'   'Dense3Pattern'   'Dense4Pattern'   'Dense5Pattern'   'Dense6Pattern'   'Dense7Pattern'    
option rainbow=color1[/color2...][,from:to]
  (e.g.  set format t.A color="rainbow='red/white/blue,100:150,linear/0:0/0.7:0.5/1.:1'"
show off hide column
show show hidden column
filter=s_columnFilter a conditional expression which is used for row filtering. (see example below)
 
More examples:
 
add column t Chemical({ "CCC", "CCO" }) 
add column t Mass( t.mol ) name="MW"
set format t.MW "<b><p align=right>%.4g</p></b>"
set format t.mol 150
set format t.MW color = " MW>45 ? 'red' : 'green' "
# add an external color column 
add column t { "#BAFFBA" "#FFCACA" } name="clr"
set format t.clr off # hide it
set format t.mol color="clr"  # color by clr column
set format t.MW show off  # hide column
set format t.mol filter="_ ~ 'O'"  # show only containing oxygen
The following example show how to bind any custom action to table cells. 
 
# create a random table
makeTable Name( "t" unique ) 10 2 1 0 no yes yes no  
# set action to simply print cell content
set format t.A "<!--icmscript name=\"1\"\n print %@.%^[%#]\n--><a href=#_>%1</a>" 
# bind a simple dialog and action.
set format t.B "<!--icmscript name=\"1\"\n#dialog{\"AAA\"}\n# i_n (1|2|3)\n print %@.%^[%#], $1\n--><a href=#_>%1</a>"
See also:
 
 
 | set grob coordinates and string label | 
 set g_grobName  M_Xyz
 
 set g_grobName [ append ] s_Label  
 
 set g_grobName reverse  
# reverse grob normals so that the light is from inside.
 
 
 set grob selection reverse  
 
 set grob selection [ append ] s_Label  
 Set new coordinates to the vertexes of the specified graphics object.  
The matrix dimensions should correspond to the number of vertices. 
The initial coordinate matrix can be extracted with the Xyz ( grob ) function.
 
  
 read grob s_icmhome+"beethoven" # try stravinsky if you want 
 display beethoven
 display "DESTRUCTION OF CLASSICAL MUSIC" 
 xyz= Xyz( beethoven ) 
 fuzz = Random(-0.2,0.2,Nof(xyz),Length(xyz)) 
 xyz = xyz + fuzz 
 set beethoven xyz 
 color beethoven Random(Nof( beethoven ),3, 0., 1.) 
 Invert grob normals
 set grob [selection] reverse
 change direction of vertex plane normals in all grobs to change 
direction of lighting and sign of the Volume function. 
If option selection is specified only the GUI-selected grobs are processed.
 set g_grobName1 g_grobName2 ..  reverse   # obsolete. Now 'grob select'
 change direction of normals in specified grobs. 
In some simple grobs the order of vertices defines the 
normal implicitly. In this case the order is changed.
 An example in which we contour a density map, split the grob into outer shell and cavities and measure their volumes:
  
 read pdb "1est.m/" 
 make map potential 1. Box( a_ ) 
 make grob m_atoms 0.2 exact solid 
 split g_atoms 
 set grob reverse   # invert normals of all grobs 
 Volume(g_atoms1 )  # outer shell is now illuminated from inside 
 Volume(g_atoms2 )  # cavities have now positive volume. 
 
 
 
 set key  s_keyName  s_Command
 binds key to a command. Allowed keys: F1, .. F12, Ctrl-F1, .. Ctrl-F12, 
 Ctrl-A, ... Ctrl-Z, Alt-A, ... Alt-Z. Add "\n" at the end if you want 
your command to be automatically executed.
 Examples:
  
 set key "F10" "set plane 1" 
 set key "Ctrl-B" "l_easyRotate=!l_easyRotate" 
 set key "F11" "varLabelStyle=\"nextItem\"\n" 
 
 
 
 [ set label distance | Set label table | Set label chemical | Set label 3d label ] 
 set label  as_atomForResidueLabels 
 assign residue labels to the selected atoms  as_atomForResidueLabels . 
The atoms at which the labels are displayed can be returned with the L selection
in the atom field, e.g.  a_a.b/10:24/L .
 Examples:
  
 build string "se trp ser ala tyr"
 set label a_/tyr/cb  # move label from Ca's to Cb's for all tyrosines 
 
 
 set [ residue ] label distance   rs [ { R_3displVector |  M_displMatrix } ]
 reset the relative displacements of the selected residue labels rs_ to their  
default of the specified positions. If vector is specified, all the relative displacements 
are set to this vector, if a relative displacement matrix Nx3 is given, each selected 
label is moved to the specified relative position.  
The default position is the relative displacement of {0. 0. 0.} 
from the residue label carrying atom (usually the Ca atom for peptides, also see the 
 set label as_ command). 
See also: GRAPHICS.resLabelDrag
 Examples:
  
 build string "YYEAH" 
 set label a_/tyr/cb  # move label from Ca's to Cb's for all tyrosines 
 display a_*  residue label 
 GRAPHICS.resLabelDrag=yes  # now drag labels with the MiddleMB 
 set label distance a_/2:4  # reset labels for residues 2:5 
 set label distance a_/2:4 {1. 0. 3.} 
 
 | set labels for table rows | 
 
 
 set label T_table i_label [index=I_indices]
 
Assigns  to table rows. Row labels are used to highlight table rows in GUI
and for scripting purposes.
Example:
 
 group table t {1 2 3} "A"
 set label t 1 index={1,3}
 Label(t)
See also: Label Index table label
 
 
 | set labels for 2D chemicals | 
 
 
 set label chemarray [S_labels|s_label] [color=s_color] [distance=r_dist] [index=I_]
 
Assigns annotation (sites) for selected atoms in 2D chemical spreadsheets. Atom selection
can be done using select chemical command.
 
Example:
 
 add column t Chemical( "COc1cc(C=C2C(N(CC(O)=O)C(=S)S2)=O)ccc1OCc1ccc(cc1[Cl])[Cl]" )
 select chemical t.mol filter="AtomNum==1"
 set label t.mol "First Atom"
 select chemical t.mol filter="AtomNum==2"
 set label t.mol "Second Atom"
 select chemical t.mol "C(=O)[O;H]"
 set label t.mol "Carboxy" color="red" distance=1.5
 select chemical t.mol off
 
See also:
select chemical delete label chemical
 
 
 
 
 
 set label 3Dlabel [selection] [s_text] [color_spec] [font_spec] 
 
change the text label properties for a  3Dlabel object . 
Changes will be only applied to the selected labels in 3Dlabel if the selection keyword is used.
 
This command may change:
 
 
 set map  m_theMapYouWantToWorkWith
 assigns  the current map status to the specified map.
 
 
 | set the current Molcart connection | 
 
 
 
 
 set molcart connect=s_connectionID
 
Sets the Molcart connection to be the current.
 
 set molcart database s_dbname
 
Sets the current Molcart database to s_dbname. 
See also: molcart, molcart connection options, connect molcart
 
 
 | setting names to chemical compounds in an array or a table | 
 
 [ Set name sequence ] 
 set name chem_array { S_names | s_name } [[index=]{i_index|I_index}]
 
assigns specified names to each element of the chem_array . This names 
can be extracted with the Name( chem_array ) function.
Example:
 
read table mol "drugs.sdf"
set name drugs 2 "aspirin"
set name drugs.mol {2,25} {"aspirin","cocaine"} 
#
n=Nof(drugs)
set name drugs.mol Sarray(n,"drug")+Count(n)
set name drugs.mol drugs.synonim
In the chemical tables there is a special column 'NAME_' to acceess chemical names. Normally this column is created automatically
created upon reading an .sdf file.
You can sort, search in the column. All modifications made the 'NAME_' column will
be automatically synchronized with chemical names (and vice-versa)
 
However, if the _NAME column  is created manually, to convert it into a legitimate and synchronizeable name of a chemical one needs to
use the set name command.
 
Example:
 
read table mol "t.sdf" name="t" # NAME_ is created automatically. It will be synchronized.
t.NAME_[1] = "aspirin"
print Name( t.mol[1] )
 
 
 | setting names to chemical compounds in an array or a table | 
 
 
 set name seqarray { S_names | s_name }
 
 
 
Assigns names to elements of sequence parray. If array of names S_names is specified, 
it should have the same size as the sequence array.
 
 
 | Setting the current object | 
 set object [ os_newObj ] [stack]
 assigns  the current object status to the specified object.  
Switches to the next one by default.
 
Option stack means that the in-object-stack will be extracted from the object into the shell. It is equivalent to the load stack object command.
 
 
Examples:
  
 set object a_crn.   # set it to object crn  
 set object a_1.     # set it to the first object  
 set object          # switch to the next or alternative  
 set object a_2. stack # switch and extract its built-in stack
 
See also:
 set type os_ s_type . 
 
 
 set occupancy  as_select  r_NewOccupancy
 sets occupancy of selected atoms to or by a specified real value 
between 0.0 and 1.0
 Examples:
  
 set occupancy a_/2:5/!ca,c,n,o 0.5 
 
 set occupancy a_/2:18/ca,c,n 1. 
 
 
 set plane [move] [ i_plane ] [ { off | on } ] [ name= s_planeName ]
 toggles the specified graphics plane on and off.  
Up to seven planes can be set. Optional name is assigned to a plane. 
It is a convenient way to operate with complex composite images. 
Every image is assigned to a certain graphical "plane" when displayed. 
Different parts of the image can be assigned to different planes. 
For example, plane 1 may contain wire representation of molecule1, 
plane 2 its molecular surface ("surface") and 
plane 3 molecule2 in "xstick" representation. It can be achieved 
by pressing "F2" and "F3" (which are aliased 
to set plane 2 and set plane 3, respectively) before displaying 
surface and xstick respectively.  
Now by pressing "F1" , "F2" and "F3" one can toggle these three screens (or planes)  
to display any combination of them.  It is much better than undisplaying 
and displaying them directly, especially for representations requiring serious computations 
like surface and skin .  The main modes of the set plane command:
  
 set plane 2 : if plane2 is 'off', make current and switch it 'on'; if it is 'on', switch it off. 
 set plane 3 on : switch the plane on, but do not change the current plane 
 set plane 4 name="homologue" : just assign name to the plane, no switching 
 Examples:
  
 build string "se ala ala"  # create a peptide 
 set plane 2  # F2 with the cursor in the graphics window 
 display surface 
 set plane 3  # F3 with the cursor in the graphics window 
 display xstick 
 set plane 2  # switch off the surface  
 set plane 2  # switch the surface back on 
 set plane 3  # switch off the xstick  
 set plane 3  # switch the xstick back on 
 
 
 set pmf I_icmTypes [energy=r_eDepth(-10.)] [margin=r_maxDist(8.)] [function=i_power(2)] [delete]
 
this command sets the specified potential with the r_eDepth value at distance = 0. and 0. at distances beyond ~r_maxDist for the 
 iIcmType : iIcmType interactions for the types specified in the I_icmTypes array. The functional dependence is defined by the function argument (the default is a quadratic function). The function is:    
 
E =  r_eDepth *( 1. - x/r_maxDist ) ^ i_power
For example if you want atoms of type 8 to attract each with a constant force (and linear dependence of the energy as a function of distance) use this: 
set pmf {8} function=1 delete
Arguments and options:
I_icmTypes  the pmf force field will be assigned between pairs of atoms of the same type from the specified list.  
We usually prefer to use unused hydrogen types such as 7,8,9,28,29,32:40,44:48 . This will still make the artificial atoms visible (in contrast to the virtual atoms ) and will not affect any of the "real" atoms.  Use set type as iType  command to set the artificial types
Check the icm.cod file for the available types. 
delete : makes sure that the specified types do not interact as van der Waals spheres, and incapacitates those atom types. See the suggested types above.
energy = r_eDepth  . see formulat above. The value of energy when two atoms of specified type are at the zero distance
function = i_power . The exponent of the functional dependence above.
margin = r_maxDist . The interatomic distance at which the "mf" term becomes zero.
 
Example:
 
build smiles "C1=CC=CC=C1.C1CCCC1"
set type a_//h?1 8
set type a_//h?2 9
set pmf {8,9} margin=6. energy=-5. function=3 delete
display
color a_//C8 green
color a_//C9 magenta
show energy "vw,mf"
See also:
 
pmfshow pmf
read pmf file  # e.g. ident.pnf in s_icmhome
 
 set property [ only ] [ on | off ] icmShellObject1 .. prop1 prop2 ..
 ICM shell objects of the following types: 
integers, reals, strings, sequences, alignments, profiles, maps, matrices, tables, grobs, iarrays, rarrays, sarrays 
have an array of property elements. This elements can be set to on and off from the shell 
the they influence visibility, edit-property and some other properties  
of a variable in the GUI environment.
 Allowed property elements:
  
| bit_name | description | 
|---|
 | command s | indicates that the string contains ICM commands and is a script |  | delete | protects from the delete command |  | display T_ | activates table actions such as double click, cursor and lock |  | field T_ | makes the content of individual cells of a table un-editable |  | factor T_ | indicates that the table is a table of structure factors |  | html s_ | indicates that the string is an HTML document. It may contain internal links to scripts, images and slides |  | show | makes object name invisible in the Workspace, is off for system variables |  | write | indicated that object will be written in  write binary all  command. This option is 'on' by default. |  | smiles | indicated that elements of an sarray will be treated as smiles string and depicted on-the-fly in the table. |  Option only resets the property mask to 0 before setting the specified bits. 
Example:
  
ii = {1 2 2 3} 
group table t {1 2 3} "a" {3.3 3.3 4.4} "b" 
set property t only  # clean up 
set property t ii write delete field off # protect the content 
More examples:
 
s2 = "read pdb \"1crn\" delete\ndisplay ribbon yellow\n"
set property command s2  # s2 will appear in Workspace
 
 
 
 
 
 set property T_column {field|fix|new|plot} [on|off] [only]
 
 
field allows one to edit cells
fix freezes a column to always keep in sight during horizontal scrolling through a large number of columns
new marks a column as having a new content (a flag to update a view)
plot : converts cell-vectors into in-cell plots (e.g. add column t Matrix(3); set property plot t.A )
 
Note: to hide and show columns use set format T_column  show on
 
See also: set property chemical view,  set format
 
 | set chemical view options | 
 
 
 set property chemical view chemicalColumn s_chemicalProperies [only] [off]
 
sets various chemical view options for the molecular column of the ICM table.
 
Each character in s_chemicalProperies codes single chemical view option.
 
 
"H" : Hetero-atom hydrogens
"T" : Terminal hydrogens
"S" : Atom stereo labels
"X" : Do not show explicit hydrogens
"A" : Aromatic rings"
"C" : Show 'chiral/racemic' flag
"3" : Do not show 3D as 2D
"U" : Unique atom classes
"N" : Atom numbers
"F" : Full atom names (if any)
"M" : Monochrome atom labels
"W" : Don't show atom text labels. Colors half of the atom's adjustment bond with the element color (Like wire in 3D)
"R" : Don't show atom text labels. Draw color square instead.
 
Example
 
add column t Chemical("CC(=O)OC(C=CC=C1)=C1C(O)=O")
set property chemical view t.mol "HM"      # monochrome labels + hetero atom hydrogens
set property chemical view t.mol "M" off   # turn off monochrome  
set property chemical view t.mol "A"       # turn on aromatic ring view  
 | set alignment view options | 
 
 
 set property alig i_mask [only] [off]
 
sets various view properties for the alignment:
 
 
512    : do not show consensus line
1024   : display tree
2048   : show alignment profile
8192   : do not show sequence offset
65536  : do not show alignment body. Useful if you want to export profile only.
524288 : show ruler
 
Multiple values can be combined used + operator.
 
Example:
 
set property myAlig 2048+65536   # show profile only
 
 
 
 | set randomize : reset the randomSeed | 
 set randomize i_NewRandomSeed
 resets the random seed to the new value. If you run any procedure or function 
for the first time, it will show you the value of randomSeed . This value 
can be reset at any time later with the above command.
 Example:
  
Random(1,10) 
 Info> randomSeed = 1055822291 
 4 
 
set randomize 1055822291 
Random(1,10) 
 4 
 
 
 
 
 set resolution  os  { r | R_NewResolutions }
 
set resolution of selected objects to a specified real value or individual values from the R_NewResolution array.
To assign individual resolution, provide a real array with resolutions for each object.
 
Example:
 
read pdb "1crn"
print Resolution( a_ )[1]
set resolution a_ 9.9
print Resolution( a_ )[1]
 
See also: Resolution
 
 
 set stereo [ i_plane ] [ { off | on } ] [ name= s_planeName ]
 this command allows one to reset the stereo mode from a command line or scripts. 
See also: GRAPHICS.stereoMode
 
 
 set  rs s_SecStructPattern
 assign the specified local secondary structure to the selected residues of an 
ICM-type object. Note that this command changes the conformation 
of the selected residues, in contrast to the command assign sstructure .
 
The s_SecStructPattern string (e.g. "HHH___EEE" ) can be shorter than the number of selected residues. In this case the pattern will be applied multiple times.
For example:
 
set a_/A "E" # will set all residues to an extended conformation
 The phi,psi angle values are changed according to the following code:
  
| ss_code | phi,psi angles | description | 
|---|
 | _ | -179.9,179.9 | extended conformation |  | E | -139.0,135.0 | antiparallel beta strand |  | e | -119.0,113.0 | parallel beta strand |  | H | - 62.0,-41.0 | alpha-helix |  | G | - 49.0,-26.0 | G-helix (3/10) |  | I | - 57.0,-70.0 | I-helix |  | P | - 78.0,149.0 | poly-proline 2 helix |  | L | + 57.0,+47.0 | Left-Alpha |  Examples:
  
 build string "LLELGQAPGALHRVPLSRRESLRKKLRAQGQLTELWKSQNL"
 display ribbon residue labels 
 set a_/2:8 "H"   # all 6 residues will be assigned to a helix
 center 
 set a_/1:12 "HHHHHH__EEEE" 
 center 
 set a_/A String("H", Nof(a_/A) ) 
 center 
 set a_/A String("_", Nof(a_/A) ) 
 center  # ONLY UNFIXED PHI,PSI VARIABLES ARE SET, SO pro IS BENT! 
 set a_/A String("G", Nof(a_/A) ) 
 center 
 set a_/A String("E", Nof(a_/A) ) 
 center 
 
 | set sstructure to sequence | 
 set sstructure  seq s_SSstring  i_from i_to
 set secondary structure s_SSstring to the specified sequence. 
If s_SSstring is an empty string, the secondary structure definition is removed.
 Examples:
  
 a=Sequence("LLELGQAPGALHRVPLSRRESLRKKLRAQGQLTELWKSQNL")  # 1st seq. 
 b=Sequence("PLLEATQIKVPLKKIKSIREVLREKGLLGDFLKNHKPQ")     # homologue  
 set sstructure a "HHHHHHHHHHH______EEEEEEEE_____HHHHHHHHH__" 
 l_showSstructure = yes 
 show Align(a b) 
set sstructure seqarray S_sstructures
 
 
 
set secondary structure strings S_sstructures to elements of sequence parray. 
Array sizes should match.
 
 
 set stack [os] loop|fast [off]
 
 set stack [os] energy [from to]  R_NewEnergies 
 
 set stack [os] number [from to]  I_nVisits 
 
 set stack [os] all    [from to]  I_nTotalVisits 
 
resets stack display parameters, energy values, or number of visits, or total number of visits, 
for conformations stored in the stack .  
If the object is specified, the internal object stack is modified.
New energy values may be useful for the subsequent sort stack command. 
 
 set stack align [from to]  
 
will set the total visits to 1 and will set the visits to {1,2,3,..}.
This setting is convenient since now the visits can be used as and an ID of a conformation
while the total visits at 1 is helpful for future compression (the compress stack will
add up those 'ones' into the total number of conformations compressed into one bin.
 
If from and to are not specified, they are assumed to be 1 and Nof(stack) .
 
The stack display parameters. 
loop  equivalent to the loop option in the display stack command, it replays the stack until interrupted with the ICM interrupt.
fast  option prevents interpolation between stack conformations (the default is 20 interpolated frames)
 
See also:
 
 
 set swiss ms_proteinChains { S_swissprotCodes | s_swissProtCode }
 set swissprot name (like IL2_HUMAN ) to one or several chains selected by ms_proteinChains . 
To clear it just set it to an empty string.
 
E.g.
 
build string "AAAAAAA"
set swiss a_ "SILLY_HUMAN"
Name(a_A swiss)[1]
 SILLY_HUMAN
set swiss a_P ""  # clear all previously set swiss IDs
 
Warning: Uniprot/swissprot may change uniprot ids and they become obsolete.
Swissprot IDs are at any given time unique but perishable, while the accession numbers AC are not unique (many different ACs for the same entry) but permanent. 
 
See also: Name( ms_ swiss ) function.
 
 
 | set crystallographic symmetry group | 
 
 
 set symmetry  os_object  R_6cell  s_symgroup | i_symgroup [ i_NofChains ] 
 
 set symmetry  os  s_crysym_card  # contains "group N Z a b c alpha beta gamma"
 assigns symmetry and cell parameters to selected object(s).  The combined crysym record is often
available in exports.
 
The set of parameters is be compatible with that provided in CRYST1 PDB card: 
 
 
R_cell should be a 6-component real array, containing values of 
A, B, C, alpha, beta and gamma. 
 
s_symgroup is a string description of the space group. To check 
validity of the s_symgroup, use the Symgroup( s_symgroup )} 
function, which will return a number from 1 to 230 for a valid space group name.   
Fast Fourier transformations are currently supported for s_symgroups 
"P 1" and "P 21 21 21", but all the other commands ( make map cell 
 transform etc.) will work on any space group defined in the 
  International Tables for Crystallography. 
 
Z-value, the number of polymer chains in a unit cell, is extracted from the last integer parameter  
or assigned automatically according to the number of transformations of the symmetry group. 
 Examples:
  
 build string "se ala ala ala" name="z" 
      # suppose this is my modified crambin 
 set symmetry a_z. { 40.96 18.65 22.52  90.0 90.77 90.0 } "P 21"  
 
 | set biological symmetry to an object | 
 
 
 set symmetry [append] ms R_12N_transformations 
 
sets biological symmetry to selected chains of the object.
The biological symmetry is applied to all the molecules belonging
to a certain chain. For that reason it is recommended to use the
 molecular selection by chain (e.g. a_Cabc for chains a,b,c ) 
 and use the set chain command if required to assign one chain character to a group
 of molecules.
 
 By default, the previous biological symmetry will be overwritten. The append option
 tells the program to add a new biomolecule record.
 
Example:
 
  read pdb "2ins"
  set chain a_a,b,zn "A"
  set symmetry a_CA Transform( a_ )[13:24]
 
See also:
 
 
 | set symmetry to a torsion | 
 set symmetry { 1 | 2 | 3 | 6 |  exact |  heavy |  pseudo }  vs
 assigns rotational symmetry to selected variables. This symmetry will be used to 
automatically transform the value of a torsion angle into 
[ -180.0/symmetry , 180.0/symmetry ] range.
 Options are the following:
  
 exact - impose exact symmetry (methyl groups=3, xi2_phe=2) 
 heavy - impose exact symmetry as if there are no hydrogens 
 pseudo- impose pseudo symmetry (no_hydrogens + xi2(his,asn,gln)) 
 
 
 set table  t_theTableYouWantToWorkWith
 assigns  the current table status to the specified table (similar to set object os_  
to set the current molecular object).
 
 
 | set active energy or penalty terms | 
 set terms [  only ] [ s_termsString ]
 set energy and/or penalty terms for further energy calculations.  
Each term has a two-character abbreviation. 
The terms are appended to the string unless option only is specified.  
The final energy-term string is returned in the s_out string
 Examples:
  
                 # vacuum terms, solvation and entropy  
 set terms only "vw,14,hb,to,el,sf,en" 
 set terms "tz"  # add tethers to the list  
See also: show energy , minimize ,  montecarlo , Energy
 
 
 
 
  set selftether [ as [only] ] ["z"|"box"|"xyz"] [tether|R_xyz|M_xyz]  # copy x,y,z to selftethers
 
  set selftether delete [ as ] 
 
sets selftethers status and type ("xyz" by default, or "z", or "box"). Also, in the 'xyz' mode it sets the target coordinates for the specified atoms. These positions then can be used as selftethers.  If the type of tether is "box" the energy calculation with the term ts needs the box defined by the TOOLS.tsShapeDatavariable
 
Options:
 
only   :  delete all selftethers in the object and the set the specified ones
tether :  move destination coordinates from regular tethers to selftethers
"box"  :  set ts type to "box" and use box definitions from TOOLS.tsShapeData"z"    :  set ts type to "z" and use atom specific z-coordinate of the destination atom or array
"xyz"  :  set ts type to the standard spherical type controlled by 3 coordinates
 
Example:
 
build string "AHWK"
TOOLS.tsToleranceRadius = 3.
TOOLS.tsWeight = 0.1
set    selftether a_//c*  
set    selftether a_//n* only # clears the previous ones from object and sets  nitrogen selftethers
TOOLS.tsShapeData = Box( a_//o* 2 ) 
set    selftether a_//o* "box"  # clears the previous ones and sets  nitrogen selftethers
set    selftether a_/lys/cz* "z" {0., 0., 30.}  # clears the previous ones and sets  nitrogen selftethers
delete selftether        # delete all selftethers in the current object
See also:
 
 set tether [ align | ali ] [ exact ] [ only ]  as_atomsToBePulled [ as_atomTargets ]
 
 set tether residue  rs_toBePulled rs_targets   
 # no residue alignment is forced, residues are equivalenced sequentially
 
 set tether P_atompairs [ os_ObjToBePulled }
 this command sets tethers restraining atoms of ICM-object (selection  as_atomsToBePulled)  
to corresponding atoms of another object (  as_atomTargets). 
The as_atomTargets selection may also contain only one atom, in 
which case all as_atomsToBePulled will be tethered to a single atom.   
If the second argument is not specified, all the as_atomsToBePulled 
atoms are tethered to the origin (the {0. 0. 0.} point). Option only 
signals that all previously imposed tethers must be deleted.
 
The residue alignment is controlled by the alignment options . 
 
If option residue is specified, it just takes the selected residue pairs in sequential order.
 
If parray of atom pairs is specified (it can be created with the make distance command or with the GUI distance tool) 
the tethers are picked from suitable atom pairs of the specified P_atompairs object. If the explicit tethered object
is not specified, it is assumed to be the current object .
 
 In a residue pair the only the backbone atoms such as  
ca,c,n,o,ha,hn are tethered with the exception of
  
identical residues: all atoms are tethered 
F with Y (all but the hydroxyl) 
D with N 
E with Q 
 The number of imposed tethers is saved in i_out .
 See also: superimpose, alignment options, minimize tether.
 Example (try this series of commands in one continuous session):
  
 build string "se glu ala"  # a simple object  
 set tether a_/2            # tether to the origin 
 display tether wire virtual 
 minimize v_//?vt* "tz" 
 
 delete tether 
 build string "se gln val" name="gv"  # another object  
 set tether a_2.//ca,c,n a_1.//ca,c,n exact # tether set to set  
 display tether wire a_*. only  
 minimize v_//?vt* "tz" 
 
 delete tether 
 set tether a_2.//ca,c,n a_1./1/ca  # tether to a single atom 
 display tether wire  
 minimize v_//?vt* "tz" 
 
 
 | set tether append: Extending the identified substructure with neighboring atoms | 
 set tether append [ all ]
 
if maximal common chemical substructure was identified using the find molecule command
and tethers were imposed between the matching atoms, the initial set of tethered atoms can
be further propagated into the neighboring atoms. Without option all only suitable hydrogens
are added to the initial match. With the all keyword heavy atoms will also be added.
Note, that any two heavy atoms next to a tethered pair are considered a match and will be paired.
 
Example:
 
  build string "H" 
  rename a_ "his"
  build string "W" 
  find molecule sstructure tether all a_his.//!h* a_//!h*
  set tether append a_  # add single hydrogens
  set tether append all a_  # add heavy neighbors
 
 
 set type [ mmff ] [ as {  i_type | I_type } ]
 
 assigns  the specified atom type (see icm.cod or show atom type [mmff] ) 
to the selected atoms. Both the ICM- and the mmff- atom types  
may be manually adjusted to correct the automated set type mmff command.
 
 
 | set type property : contributions of atoms types to the property grids. | 
 
 
 set type "apolar"|"atomic"|"membrane" R_sf_density_values_in_kcal_A2 
 
reset the "atomic solvation" or "apolar" surface based implicit solvation energy densities.
A set of solvation energy densities for the first 25 solvation types (see icm.hdt file) are different for the "icmff" force field and need to be explicitly redefined if one intends to use the "icmff" force field (e.g. 
 
LIBRARY.res = {"icmff"};  ffMethod = "icmff"; vwSoftMaxEnergy=15.; read library energy;
set type "atomic" { 0.0080,0.0220,-0.0900,-0.2240,-0.1760,-0.0630,-0.0350,-0.2240,-0.0960,-0.1160,-0.0120,-0.0510,0.0080,0.0080,-0.0630,-0.0900,-0.0900,-0.1760,-0.0900,0.0,0.0100,0.0100,0.0100,0.0100,0.0100}
set term only "bb,vw,14,hb,el,to,cn,sf"
See also: surfaceMethod preference, icm.hdt file containing the default icm values. 
Example:
 
surfaceMethod = "atomic solvation"
x = { 0.0080,0.0220,-0.0900,-0.2240,-0.1760,-0.0630,-0.0350,-0.2240,-0.0960,-0.1160,\
     -0.0120,-0.0510,0.0080,0.0080,-0.0630,-0.0900,-0.0900,-0.1760,-0.0900,\
      0.0,0.0100,0.0100,0.0100,0.0100,0.0100}
set type "atomic" x
 | set type property : contributions of atoms types to the property grids. | 
 
 
 set type property R_upToSevenWeights [only] [ I_listOfAtomTypes ] 
 
This command defines the contribution of the listed atom types to each
of up to seven grid maps named g1 g2 g3 .. . This grid maps 
will be used by the "gp" energy/penalty term for local or grobal energy optimization (see show energy , minimize and montecarlo ).
 
Arguments and options 
R_upToSevenWeights provides weights of contributions for this atom type
to the grids for the make map potential "gp" command, as well as the maximal contribution that atoms with those atom types will get in g1, g2, .. etc. The number of elements in this array determines the number of grids.
I_listOfAtomTypes is an iarray of types, e.g. {100,111,112}, or Count (100,199) for a range of types.
option only means that for these atom types the weights not covered by the R_upToSevenWeights array are set to zero.
 
The types are listed in the icm.cod file. If the I_listOfAtomTypes is
not provided, all heavy atoms will be set to contribute to grids.
 
Example to set different fields for oxygens (types 50 to 99) and all other atoms:
 
set type property {1., 0.} Count(50,99) only
set type property {0., 1.} Count(1,49)//Count(100,390)
A better way to set the default types would be to use the setApfTypes macro, e.g.
 
build smiles "C1NCCCC1" 
setApfTypes
make map potential "gp"
 
To set the weights of energy contributions from the individual g1, g2, .. 
modify the gpWeights array of parameters, e.g. 
 
gpWeights = {2., 1. , 0., 3. , 2., 1., 1.}
gpWeight = 3. 
The overall contribution ofthe weighted sum can further be weighted with the gpWeightparameter.
See also: 
see script _chemSuper and _chemAlign . 
 
 
 
 set type os s_type
 
change the type of one of several non-ICM objects.
The following types are allowed (two dots denote the minimal necessary string):
 
Example:"pharma.." or "ph4" - pharmacophore
"ca"  - C-alpha models only
"xray" or "x-ray""nmr" - solved by NMR
"model" - general, or generated by modeling
"electron.." - solved by electron diffraction
"fiber.." - solved by fiber diffraction
"neutron.." - solved by neutron diffraction
"simple" - specialized simple models
 
build smiles "C1CCCCC1"
strip a_  # can not redefine the ICM type
Type(a_ 2) # check it before
set type a_ "pharmacophore" 
Type(a_ 2) # check it after
 
 
 
 
 set type ms s_type
 
change the type of the selected molecules.
The following types are allowed:
 
These types are frequently used in scripts and macros. 
The types can be selected, e.g. a_M,W  (metals and waters).
Note that function Type( ms_1 2 ) returns the auto type only."A" - amino (proteins and peptides)
"N" - nucleic acids (RNA and DNA)
"H" - heteroatoms (most of the chemical compounds)
"M" - metals
"W" - water
"S" - sugars
"L" - lipids
"R" - radical
"U" - unknown
"0" - switch to automated type definition from residue types (returned by the Type function)
 
Example:
 
read pdb "2ins"
show a_zn1
   5  zn1            1 zn1   2ins  H _  #   zinc ion on 3-fold crystal axis
set type a_zn1 "U"   # here we reset the type to 'unknown'
show a_zn1 
   5  zn1            1 zn1   2ins  U _  #   zinc ion on 3-fold crystal axis
 
 
 set type [ seq | sequence | ali ] { protein | nucleotide }
 assigns the specified type to the sequence ( seq_ ), all sequences ( sequence ) or 
sequences from the specified alignment or sequence group ( ali_ ).  
The type can be returned by the Type( seq_ ) function.
 Example:
  
  aaa = Sequence("AAAAATAAAA")  
  set type protein aaa 
 
  read sequence "f.seq" group="tmp" 
  set type tmp nucleotide 
 
 set type [charge] mmff [ os]
 automatic assignment of the MMFF atom types for the selected or the  
current object of any type.  This object can be both ICM-object or  
a non-ICM object, provided three conditions are satisfied:
  
the bond types are set correctly  
the formal charges are set correctly 
the object is complete and has hydrogens ( see the build hydrogen command) 
 This command is a prerequisite for the set charge mmff command (it can also be achieved with
the charge option).
 
 
 set type  "vw radii"  I_vwTypes  R_vwRadii
 reset radii defined in the icm.vwt for I_vwTypes to the R_vwRadii values. 
The van der Waals radii are used for the surface calculation in the 
   
show surface area
 command
 
 
 set type "vwel radii" I_vwTypes  R_vwRadii
 reset electrostatic radii marked as vwel defined in the icm.vwt. 
The electrostatic radii are used in the  boundary element electrostatic 
calculation.
 
 
 | set 3D view rotation, translation and size | 
 set view  R_37ViewVector
 
 set view  R_37FinalViewVector  nMilliSeconds
 
 set view  R_37InitViewVector R_37FinalViewVector  nMilliSeconds
 sets all the parameters of the graphics window (position, size, zoom, 
rotation, etc.) according to a rarray of 37 numbers.  If the nMilliSecondsparameter is specified this command makes a smooth transition between two views.
The first view is either the current view or the R_37InitViewVector view. The final
view needs to be specified explicitly.
 
This array is returned by the View () function and can be created, read and written 
as an ordinary real array.  
Aren't you disappointed that you still do not know the meaning of these parameters?  
It is dull, believe me, use the command and take it easy.  
See also: View, rotate view.  
 Example:
  
 read pdb "1crn"
 display a_1crn. ribbon  # now move the molecule, resize window .. 
 write View( ) "a.view"  # write 37 numbers in a file 
   # again: rotate, move/resize the window etc., or quit the session 
 read rarray "a.view"    # read 37 parameters 
 set view a              # restore the view 
 
 
 set vrestraint [ energy ]  rs [ s_rsTypeName1 s_rsTypeName2 ... ]
 sets variable restraints of specified types to the selected residues  rs_ . 
Variable restraint type names (strings) can be read from a *.rst 
type file and shown by the show vrestraint type command. 
Option energy enforces the "energy" type of vrestraint.
 Number of imposed variable restraints is saved in i_out .
 Examples:
  
 set vrestraint a_/*             # assign all zones to relevant residues  
 set vrestraint a_/ala "aa" "ab" # assign alpha and beta zones to all Ala residues 
 
 
Do not forget to set compare and vicinity and other parameters while doing montecarlo .
 
 set vrestraint [ only ] [{ energy | fix } ] vs r_1 r_2 [ r_3 ] [ R_values ] [ name= s_rsName ]
 impose a set of  vrestraints to the specified 
variables vs_.  
The zone will be a multidimensional elliptical well around current values (default),  
or the specified R_values values, of the selected  
variables.  
The shape of the well in each dimension is a soft square well . 
Three types of vrestraints can be imposed, depending on the 
option:
  
 probability vrestraints (the default). They are marked as "rs" in the  
 icm.rst file. Probability vrestraints are used in the BPMC procedure to  
 define the distribution of random steps. The well parameters are as follows: 
  
 The relative probability is in arbitrary units, it is only 
important as a relative number in a group of the vrestraints.r_1 : r_relProbability , the relative probability of this vrestraint 
 r_2 : r_wellRadius, the well radius  
 energy: "Energy" vrestraints (marked as "rse" in the icm.rst file).  
 set vrestraint energy var_selection r_energyDepth r_fractionFlat r_wellRadius
These allow the formation of the multidimensional wells around groups of variables  
and are used to softly restrict the variables to certain zones (see the  
 "rs" energy term).  The well parameters are as follows: 
   
  Parameter r_fractionFlat (between 0. and 1., default 0.) defines flat 
fraction of the energy well for the energy vrestraints. 
 
Note: one can create both wells and bumps using negative and positive values of 
r_energyDepth, respectively 
Example:r_1 : r_energyDepth  (it must be negative for attractive wells) 
  r_2 : r_fractionFlat 
  r_3 : r_wellRadius 
    
 build string "se nter ala ala cooh" 
 set vrestraint energy v_/3/psi -20., 0.2, 200., # WELL OF DEPTH 20. 
 set vrestraint energy v_/3/psi  20., 0.2, 200., # BUMP OF HEIGHT 20. 
An example from the _dock2mol.icm script:  
imposing an individual restraint for the virtual bond:  
                # no penalty for deviations up to 15A 
 set vrestraint energy v_2//bvt1 only  -50.0 0.5,  30.0 
R_values contains target values for each angle in the selection vs_ , e.g. {-120.,60.}, 
By default the target values are taken from the current values of the selected variables. 
 
fix: Vrestraints on "fixed" variables (marked as "rsr" in the icm.rst file).  
These are used to define switches between different fixed conformations, e.g. alternative 
conformations of sugar rings, proline rings, switches between L and D amino-acids etc.  
These switches will be tried in the montecarlo procedure if these variables are 
included in the set of vs_MC variables but not included in the set of 
the minimization vs_min variables. The parameters are defined as follows: 
   
  The r_relProbability is in arbitrary units as for the 
probability vrestraints. 
 
Example with L-D transition, through changing the sign of the 
two phase angles:r_1 r_relEnergy, relative energy of a conformer 
  r_2 r_relProbability . 
    
 build string "se ala his trp"  
 set vrestraint fix V_/3/fha,fcb  Value( V_/3/fha,fcb ) 0. 1. name="l"  
 set vrestraint fix V_/3/fha,fcb -Value( V_/3/fha,fcb ) 0. 1. name="d"  
 montecarlo V_/3 v_//* 
 The radius of the vrestraint well (in degrees for angles) is given by 
the r_wellRadius.  
Option only deletes all the previous vrestraints.  
The name is optional. The names of the "probability" and "fix" vrestraints 
are be shown in the output of the  montecarlo procedure.  The names need not be unique.
 Example: creating a file with equal probability  
vrestraints around stack conformation angles with 30 deg. radius:
  
 read stack "f1"      # read conformational stack  
 for i=1,Nof(conf)    # go through all the conformations  
   load conf i        # load them one by one  
   set vrestraint v_/2:5/phi,PSI,xi1  1. 30.  
 endfor 
 
 build string "se ala his trp" 
 set vrestraint v_/2/phi,xi1,xi2 ,{-60.,-60.,120.} 0.5, 45. name="bb" 
 set vrestraint v_/2/phi,xi1,xi2 ,{ 60.,-60.,120.} 0.5, 45. name="cc" 
 montecarlo v_/2/phi,xi1,xi2 
Note that in the command a special PSI torsion specification is used for traditional residue attribution.
 
 | set values of internal coordinates | 
 set  vs [ add ] { r_value |  R_arrayOfValues }
 sets specified variables to a given value(s) (for angles the value must be in degrees).  
If rarray R_arrayOfValues is specified, its values are assigned sequentially to the variables.  
It the array is shorter than the selection, the values are applied periodically.  
Option add means increment by the specified value rather than 
set to this value.
 Examples:
  
 read object s_icmhome+"crn.ob"
 set v_//phi -60.                 # all phi to -60 degrees 
 set v_//phi,PSI { -60., -40. }   # make sure that the first  
                                  # variable in selection is phi  
 
 set v_/1:8/phi Random(-180.,180.,8) # all different random phis  
 set v_/1:8/phi add 2.0              # increase 8 phi angles by 2 degrees 
Note that in the second command a special PSI torsion specification is used for traditional residue attribution.
 
 | set positional variables to place a molecule to polyhedral vertices | 
 set  vs grid i_vertex i_NofVertices
 (order of arguments is important!) 
sets specified 2 variables ( normally a virtual planar angle and torsion angle )  
to the values such as to put a molecule in the vertices of tetrahedron  
(i_NofVertices=4), octahedron (6), cube (8), icosahedron (12) or dodecahedron (20).  
Used to sample uniformly the surface of globular molecules.  
Values of i_NofVertices other than above are not allowed.  
The polyhedron is built around the origin.  
The size of the polyhedron is determined by  v_//bvt1 variable which is a virtual 
bond length from the origin to the first virtual atom (vt1) of the two attached to 
each molecule. To check how polyhedrons are generated look at this example:
  
 read object "complex" 
 display virtual a_//ca,c,n | a_//vt* only 
 color molecule 
 set a_1//vt1       # set vt1 of a_1 to its center of mass 
 set a_2//vt1       # set vt1 of a_2 to its center of mass 
 set v_1//bvt1 0.1  # move a_1 to the origin (0.1 to avoid a singularity) 
 set v_2//bvt1 30.  # offset a_2 
                    # this is for a_2 to hop around a_1  
 for i=1,20  
   set v_2//avt1,fvt1 grid i 20 
 endfor 
                    # this is for a_2 to rotate need the same location on a_1 
 for i=1,12 
   for j=1,3 
     set v_//avt2,tvt3 grid i 12 
     set v_//tvt2 j*120. 
   endfor 
 endfor 
 
 | set size and position of ICM graphics window | 
 set window [ i_xLeft i_yDown ]  i_xSize  i_ySize [ margin= r ...] 
# without GUI
 
 set window full [ on | off ] 
 
 set window fix { i_xSize  i_ySize | off }  # with GUI
 sets the position and/or size (only size if 2 arguments are given) of the graphics window 
without Graphics User Interface (use option fix otherwise). 
Four arguments are in pixels.  
If you need to display in a fixed size window from a script we recommend to 
use the set window command first and then the  
 display command.
 The full option will switch into the fullscreen mode (also Ctrl-F and Esc to switch off) 
This option does now work with GUI.
 In the off-screen mode (see the display off command)  
 set window is accompanied by re-  centering of the molecular image  
with margin= r_ ... and other center options.
 The fix option will change window size for ICM in the GUI mode. In this case 
the window may become smaller than the actual area in the master GUI window. 
Option fix is used to make video clips with ICM using fixed size frames.
 Example:
  
            # square 700x700 window in the upper left corner 
 set window 570 30 700 700 
 display window 
 set window 300 300 
 write image window=3*View(window)  # hi-res. image 
 
 set xstick as_select  r_NewRadius | R_matchingArrayOfRadii
 sets occupancy of selected atoms to or by a specified real value 
between 0.0 and 2.5A . 
See also:
 
 
 
 [ show selftether | show site | Show svariable | show key | show map | Show molecules | show alias | show alignment | show area | show atoms | show atom type | Show bond | show clash | Show color | Show column | Showcomp_matrix | Show database | show drestraint | show drestraint type | show energy | Show energy atom | Show gradient | show hbond | Show hbondexact | Show html | show iarray | Show integer | show label | show library | show link | show logical | show mol | show mol2 | show molecule | show object | show pdb | show pmf | show preferences | Show profile | show residue | Show residuetype | show segment | show sequence | show stack | show table | show terms | show tethers | Show uniprot | show version | Show vrestraint | show vrestraint type | show volume | Show volumemap | Show pharmacophore type ] 
 show args [output=s_outputStringName] 
 show information about specified ICM-shell objects in your shell-window. 
Show is similar to the list command, but it gives you more information,  
covers a broader range of subjects and allows the user to show constants,  
subsets and expressions. 
However, in contrast to the list command, 
show does not understand wildcards.
 
Option full will show arrays and shell variables which are grouped into tables  
(the components of tables are hidden by default).  
The same option full temporarily sets l_showSpecialChar to yes when sarrays are shown.  
 
Option output allows one to dump the result into an ICM string variable with the specified name for further analysis.
 
 
 
 
 
 show selftether as
 
shows atoms with selftether restraints imposed (require the "ts" energy terms to be activated in minimize or montecarlo )
The show command also returns the number of selftethered atoms ( i_out ), the number of deviating atoms ( i_2out ) and the maximal deviation in r_out 
 
See also: selftether
 
 show site [ ms ] [ seq_1 seq_2.. ]
 show  sites  assigned to the selected molecules ms_ or 
sequences. By default all the sites of the  current object 
are shown. See also: set site, color site .
 
 
 show  arg1  arg2 ...  [output=s_stringVarName]
 show 
 ICM-shell variable, 
 constant, 
  subsets, or 
  expressions. 
One needs to separate arguments by comma only if two consecutive arguments are numbers, 
and the second on is a negative number constant. 
Option output allows one to dump the result into an ICM string variable with the specified name for further analysis.
 Examples:
 
 read alignment msf s_icmhome + "azurins"
 show azurins[3:20]   # show a fragment of the alignment  
 show a b a*b         # two arrays and their product  
 show Sin({1. 3. 5.}) # another array  
 show 2., -3.         # without the comma, it will show -1. 
 show m_crn           # map (m_crn) header information and  
                      # the map sections  
 
 show key
 show commands bound to key-strokes. Allowed keys:  
F1, .. F12, Ctrl-F1, .. Ctrl-F12, Ctrl-A, ... Ctrl-Z, Alt-A, ... Alt-Z.  See also the set key command.
 
 
 show { map | mapName }
 show the current or the specified map in text format.  
Example:
  
 build string "AKSD" 
 make map potential Box(a_) "ge" 
 display m_ge {1 2 3 0 4 5 6} 
 show m_ge 
 m_ge> written in ZYX mode (z-sections). Symmetry group #0 
    Box  {sect0,row0,col0, sect,row,col} = {-30,-8,-21, 32,16,28} 
    Cell {A,B,C, angles(deg)} = {14.000,8.000,16.000, 90.00,90.00,90.00} 
    Nof intervals (at x,y,z)  = {28,16,32} 
    Min/max/mean/rms density  = -20.000000, 20.000000, -0.182712, 12.082560 
 ...    
 ::::::::::::::::**########## 
 ::::::::::::::::**########## 
 :::::::::::..:::**########## 
 ::::*****::..::::**######### 
 :::***###*:..::::***######## 
 ::***####**...:::****####### 
 :***#####**...::::****###### 
 :***#####*:...::::******###* 
 :***##**::....:::::********* 
 :*****:::....::::::********* 
 :****::::.....::::::******** 
 ::***::::.....::::::******** 
 ::***........::::::::******* 
 ::***:.......::::::::******* 
---{13 / 32}-    # shows pages 
 
 | show objects, molecules, residues, atoms and variables | 
 
 [ object-attributes | mol-attributes ]show {  os |  ms | rs |  as | vs } show selected 
atom(s)  as_ , 
residue(s)  rs_ , 
molecule(s)  ms_ ,  
object(s)  os_ , or 
variable(s)  vs_ , respectively.
 Examples:
  
 show a_*.     # all objects 
 show a_*.*    # all molecules of all objects 
 show a_2.*    # all molecules of the second object 
 show a_*      # all molecules of the current object 
 show a_/ala   # all alanines of the current object 
 show a_1//c*  # carbons of the 1st molecule of the current object 
 show v_2.a//phi,psi 
 Data fields for objects :
  
show object 
 # a_objectName.  type    n_Mol  n_Res  n_waters resolution  object_name 
  1  a_def.  Type: ICM   Mol: 1 Res: 4   def    <*** the current object 
  2  a_1dna. Type: X-Ray Mol: 3 Res: 532 Wat: 216 Resol: 2.20 thymidylate synt..  
These fields can be accessed with the following functions:   
object name: Name( os_ ) 
object type: Type( os_ , 2 )  # returns "X-Ray","NMR","ICM",etc. 
number of molecules: Nof( ms_ ), e.g. Nof( a_2.* ) 
number of residues: Nof( rs_ ), e.g. Nof( a_2.*/* ) 
resolution: Resolution( os_ ), e.g. Resolution( a_2. ) 
number of waters: Nof( water_selection ), e.g. Nof( a_2.w* ) 
full name: Namex( os_ ), e.g. Namex( a_2. ) 
 Data fields for molecules :
  
 read pdb "1a36" 
 show a_* 
     Name     n_residues first_res_name  object_name 
 --{i Molecule}- N_Res                 Object --- 
    1  a            544 ile               1a36 
    2  b             22 dpa               1a36 
    3  c             22 dpa               1a36 
    4  w1             1 hoh               1a36 
    5  w2             1 hoh               1a36 
 ... 
These and other molecule attributes can be accessed with the following functions:  
mol. name: Name( ms_ ) 
mol. type: Type( ms_ , 2 )  # field not shown  
  Returns. "Nucl","Amino","Hetatm" etc. 
number of residues: Nof( rs_ ), e.g. Nof( a_2.*/* ) 
 
 
 show aliases
 show all currently defined aliases. 
To show a specific alias, use the
 alias aliasName
 command (e.g. alias cd ).
 
 
 show alignments [ color ]
 show currently loaded alignments. Option color colors residues  
in the alignment by type.
 
 
 show area { surface | skin } [ mute ] [ as_1 [ as_12 ] ] [ surfaceAccuracy= i_level ] [ waterRadius= r_newRadius ]
 The total area will be stored in r_out and the number of triangles used in the "skin" construction in i_out .| Calculates the area of the solvent-accessible  surface 
or molecular surface (so called skin ), respectively.   
The probe radius is defined by the waterRadius parameters (1.4 by default).
You can specify for which atoms you want to calculate the surface 
(selection as_1 ).  The surfaceAccuracy level defines the 'resolution' of the surface calculation. The default
level is 3 but the level of 5 is recommended for if the surfaces are used to make a decision about the atom burial. You can also additionally specify the  
environment for these selected atoms, i.e. the neighbors which  
you want to take into account in the surface calculation.
 The two most popular modes are the following:
  
measuring the surface area of some atoms being a part of the whole system  
 (e,g, a_1 a_*  or just a_1 , the top picture) 
measuring the surface area of a group of atoms as if they are the 
only atoms that exist in space (e.g. a_1 a_1 the bottom picture). 
 In essence, two optional selections [ as_1 [ as_12 ]] 
impose a mask on atom pairs, so that only pairs in two selections are considered. 
If only the first selection is specified, the second one is assumed to be 
all atoms .  The two reasonable choices for the  second selection 
are all atoms (the default), and the repetition of the first selection 
(acts as if not other atoms are present in the system). In all cases, the second 
selection must include the atoms of the first one, e.g.
  
 show area skin a_1 a_1,2 waterRadius=1.2
 |   | 
 
The individual areas are stored with atoms and can be returned with the Area( as_ ) function.
Warning. This command only fills out the values for the selected atoms. If you want to set the values
of other atoms to zero, use the -{set area a_//* 0. } command.
Example:
 
read object s_icmhome+"crn.ob"
set area a_1//* 0.  # make sure that the initial area is zero
show surface area a_1//!h* a_1//!h* # only the first molecule
show Area(a_//*)   # individual areas, hydrogens have 0.
show Sum(Area(a_//!h*))  # the total
 
 
 
 show as
 shows properties of the selected atoms.  
Example:
  
build string "se ala" 
show surface area 
show a_//c* 
 Atom Res    Mol Obj   X      Y      Z    Occ   B  MMFF Code  Xi Chrg formal Grad Area Grp  
  ca  1  ala  a1 def -2.748  0.000 -2.245 1.00  20.0  1 113 C  1  0.06  0    0.0  0.5    _ a_def.a1/1/ca 
  cb  1  ala  a1 def -2.329 -1.202 -3.093 1.00  20.0  1 113 C  0 -0.09  0    0.0  7.3    _ a_def.a1/1/cb 
  c   1  ala  a1 def -4.247 -0.000 -1.935 1.00  20.0  3 121 C  0  0.45  0    0.0 34.2    c a_def.a1/1/c 
The fields:  
| Field | Description | 
|---|
 | Atom | atom name |  | Res | residue number+[symbol] and name |  | Mol | molecule name |  | Obj | object name |  | X,Y,Z | coordinates |  | Occ | occupancy (from 0. to 1.) |  | B | B-factor (positive) |  | MMFF | MMFF atom code |  | Code | ICM atom code |  | Xi | chirality number (0,1,2,3) |  | Chrg | partial charge |  | formal | formal charge |  | Area | solvent accessible surface area |  | Grp | electrostatic group (atoms can not be separated) |  | as_ | selection expression |  
 show atom type 
 show atom type mmff [ { s_pattern | i_type } ]
 shows atom types stored in the icm.cod file. The mmff option  
allows one to check the Merck Force Field atom type.
 Examples:
  
  show atom type                   
       # show all ICM types 
 -------------{atom codes}----------- 
 # 
 #     icd   vw   hb   hd      wt      sf na 
 # 
 atcd    0    0    0    0   0.000    0.00 ? 
 atcd    1    1    1    0   1.008    0.00 h 
 atcd    2    3    1    0   1.008    0.00 h 
 ... 
  show atom type mmff "*cation*"   
       # cations 
  show atom type mmff "*iron*ion*" 
       # do we have iron ions? 
  show atom type mmff "?C=*"       
       # what types are connected to doubly-bonded carbon ? 
  show atom type mmff "[!C]*ring*" 
       # non-carbon types in rings 
  show atom type mmff 32           
       # some oxygens 
 -----------{MMFF atom codes}-------- 
  Symb.Typ.[V] Description  {formal charge} 
   
   O2CM 32 [1] oxygen in carboxylate anion 
   OXN  32 [1] N-oxide oxygen 
   O2N  32 [1] nitro oxygen 
   O2NO 32 [1] nitro-group oxygen in nitrate 
 ... 
 
 | show bond : detecting problematic covalent geometry | 
 show bond as [mute|error|]
 
goes through all bonds of the selected atoms (returned in i_out) and does the following:
  
 checks the number of bonds per atom, counts atoms with more than four bonds finds bonds shorter than 0.6A and longer than the sum of two van der Waals radii multipled by 0.7.
  Counts bonds that are two short or too long reports the number of problematic bonds or bond numbers in i_2out
 
 show clash [ mute ] [ as_1 [  as_2 ] ] [ -r_vwDistanceFraction ] [ r_distance ]
 shows all the interatomic distances between two atom selections which are 
shorter than the sum of two van der Waals radii multiplied by the r_vwDistanceFraction 
parameter (0.8 by default). This command can be shown to show the short contacts only
if the limit is about 0.8, or show show all pairs of atoms with significant 
van der Waals contribution (the limit of about 1.2 )
 
IMPORTANT: this will work only for the ICM-objects.  
 
Use the show energy "vw" 
command (and pay attention to the current fixation) to pre-calculate interaction 
lists. The output will show the actual distance and the ratio of this distance and 
the sum of radii. Mark the two atoms of interest, separated by a logical OR,  
and paste it into another command if necessary. 
 
The number of van der Waals contacts satisfying the r_vwDistanceFraction criterion 
is returned in the i_out shell variable.
 
The mute option suppresses the screen output ( i_out is still calculated ).
 See also: display clash, undisplay clash.  
 Visualize the strained atoms with show a_//G or display a_//G .
 Example:
  
 build string "se ala his trp glu" 
 randomize v_//*      
 display 
 show clash a_//c* a_//c*       # clashes between carbons 
 show clash a_//c* a_//c* -0.7  # more tolerant test 
 display clash 
 
 
 show color [ mute ]
 shows list of colors defined in the file icm.clr 
and stores the output list in the S_out  string array. 
Option mute suppresses output to the screen but still 
saves to the S_out array (useful for scripts)
 See also: color command.
 An example:
  
 show color 
 -------------{colors}----------- 
   1 black              #000000 
   2 white              #ffffff 
   3 grey               #878787 
   4 blue               #0065ff 
   5 red                #ff0000 
 ... 
Example of show color mute use in a script:
  
 if (Exist(view)) then  # check if graphics is active 
   show color mute      # saves a list of colors in S_out 
   for i = 1, Nof(S_out) 
     color background $S_out[i] 
     pause 
   endfor 
 endif 
 
 | show arrays as parallel vertical columns | 
 show column array1 array2 .... [ s_fileName ] [ separator= s_Separators ] [ comment= s_Comment ]
 shows several arrays in a multi- column format. 
If you want to shorten the significant digits in real arrays, use this trick:
 
a = {1.333333 2.44444}  # creating some dumb arrays
b = a
show column Rarray(a,2), Rarray(b,1)
See also: write column, show  database, write database.
 Example:
  
 resnam = {"ala" "glu" "arg"} 
 reschg = { 0., -1., 1.} 
 show column resnam reschg 
 show column separator=":" comment="Example table"  resnam reschg 
 
 show comp_matrix
 shows  residue comparison matrix 
used by the  alignment algorithms.
 See also: set comp_matrix, read comp_matrix.
 
 
 | show table in database format | 
 show database { table | array1 array2 .... }
 shows several arrays or a table in a database format.
 See also: read database show column, write database.
 Example:
  
 resnam = {"ala" "glu" "arg"} 
 reschg = { 0., -1., 1.} 
 show database resnam reschg 
 
 show drestraint [ as_select [ as_select ]] [ center ] [ mute ] [ r_violation ]
 shows distance restraints.  
Arguments:
  
optional  as_select atom selection arguments specify atom pairs to be considered. Attention, 
 the as_out selection can not be used as an argument since it is redefined 
by the command. 
r_violation : if the r_violation distance is specified, 
only the restraints deviating from the upper or lower bounds by  r_violation 
are shown. 
center : 
If center option is specified the violation is measured with respect to the 
target value of the distance restraint and optionally only the distances greater 
than r_violation are reported.  
mute option: allows one to fill out the as_out selection and calculate the 
number of selected drestraints ( i_out ) without actually reporting them. It is useful 
for scripts. 
 Output:
  
as_out atomic selection of all atoms for which the specified criteria have been satisfied 
i_out reports the number of selected drestraints 
 See also: drestraint and drestraint type.
 
 
 show drestraint types
 shows available  drestraint types as defined in the icm.rst file.  
The numbered global or local types can be used to impose  distance restraints. 
The other types are fixed and are used to impose  disulfide bonds or 
  peptide bonds.
 
 
 show energy [ mute ] [ s_termString ] [ vs ] [ as_select1 [ as_select2 ] ]
 
 show energy atom [ mute ] [ s_gridTermString ] [ as_select1 ] 
 calculates and shows values of currently set or explicitly defined in 
 s_termString  energy terms (e.g. "vw,el" )
 
If the show energy atom option (described below) is used the result is stores it in the bfactor fields with the offset of +20. 
If vs_ selection is specified, only the selected variables 
will be unfixed. The initial fixation will be restored after completion. 
Two additional atom selections may specify a subset of atom pairs 
that should be considered by the minimization procedure. 
Note that the contribution from the "14" 
energy term is not displayed separately. It is included in the "vw" contribution.  
If you want to display it separately, use the more straightforward Energy("14") function.  
 Important: the boundary element electrostatics is the most 
computationally heavy term. It is activated if electrostatic term 
 el is switched on and preference electroMethod is set to "boundary element" .  
The most demanding part is the calculation of the boundary and its characteristics.  
Therefore, for multiple calculations with the same boundary we recommend to use 
 make boundary and delete boundary commands.
 
 
 
 | show energy atom, crystallographic electron density energies | 
 
 
 show energy atom os_icm
 
calculates individual atomic grid energies for the some grid terms.
(Note: A more direct way of computing the projected map values on atom centers is given by the
  set field map command.)
 
Maps used by the the show energy atom command:
 
the result is added the value of 20. and is set to the atomic bfactor field (see Bfactor( as ) and set-factor."gc" (needs m_gc ) vw heavy atoms
"gh" (needs m_gh ) vw hydrogens
"ge" (needs m_ge ) electrostatic
"gs" (needs m_gs ) hydrophobic
"gp" (needs m_g1, ... ) properties
 
Example with the "gp" property field: 
build string "ASD"
make map potential "gp"
show energy atom "gp"
gp_e = Bfactor(a_// ) - 20. # atomic energy contributions, -20 to eleminate shift
add column t Group( gp_e , a_// "sum" ) Name( a_/ ) full)  # Group aggreates into residues
show t
 
Example with a crystallographic electron density map. 
An electron density map needs to be transformed into an evenly spaced orthogonal map
with the
 make map potential m_xray R_box | ascommand. 
Example showing how somebody messed up epinephrine's chirality:
 
loadEDS "3pah" 0. # loads m_3pah crystallographic 2Fo-Fc map for epinephrine
read pdb "3pah" # unconverted pdb
bx = Box( a_aale 5. )     # R_6box around epinephrine
convert Res( a_//* & bx ) # carve out region of interest and convert to ICM
make map potential m_3pah bx # box around epinephrine, makes m_xr
m_g1 = Trim(m_xr, -1., 1.)
set type property {1.} Count(50,300)//Count(330,404) only  # without H
set bfactor a_//* 0.
show energy atom "gp" 
set bfactor a_//* & bx 20.-Bfactor(a_//* & bx) 
Select( a_// "b<0.5")  # each atom knows its map value (shifted by 20.)
 
See also:
 set field map 
 
 show gradient
 show gradient calculated by the minimize or show energy commands.
 
 
 show hbond [ mute ] [ as_1 [  as_2 ] ][ r_maxHbondDistance ]
 calculates and outputs the list of hydrogen bonds between two atom selections. 
By default calculation is done between all the atoms of the current ICM object.
The real argument r_maxHbondDistance defines the upper bound of the 
distance between a hydrogen and a potential hydrogen acceptor to place 
the pair to the hydrogen bond list. Default value of r_maxHbondDistance 
parameter is 2.5 A. Number of identified hydrogen bonds is saved in i_out . 
To display/undisplay hydrogen bonds, use display hbond and 
 undisplay hbond commands.  
Hydrogen bonds can also be calculated by the minimize and show energy 
commands provided that the hydrogen bond term is switched on.)
 
The number of hydrogen bonds satisfying the r_maxHbondDistance criterion is returned
in the i_out shell variable.
 
The mute option suppresses the screen output ( i_out is still calculated ).
 
 | show hbond exact  : accurate bonding energy calculation | 
 show hbond exact  (-1 if atoms are not connected)
 calculate the hydrogen bonding energy according to the  distributed electron density geometry. Used in virtual screening to  
evaluate a score. The calculation builds the lone pair positions at 1.A distance from the acceptor  and uses the angular dependent formula to calculated the 'strength'. 
The strength of a hydrogen bond is placed in the user ouput field of the donor atom (a single atom) 
and is accumulated in the user output field of the acceptor atom (can support multiple hbonds). The field is returned by the
 Field(  ) function.
 
This calculation is performed like this:  ∆E(HBond) = (1-cos( φ ))∙( exp(-( dLP_Do - λHB/2 )2 )   for distances d > λHB/2, or just (1-cos( φ )) for shorter distances. (Schapira, Abagyan, Totrov, 2003, JMC).  The values returned range from 0. to 2. . For some strong acceptors the value is further increased.
 
 
 
 | show table in html format | 
 show html  T  [format=yes] [frame=1] [chemical=yes] [header=yes] [size=I_chem_size] [view]
 show the T_ table with HTML tags.
 
Options:
 
format:   preserves the formatting set by set format command (default: yes)
frame:    defines frame width in pixels (default: 1)
chemical: draw chemical structures as HTML5 canvas objects (default: yes)
header:   shows columns names (default: yes)
size:     iarray with width and height for chemical drawing.
view:     use HTML5 Molecule Editor to draw chemicals. (Generates more compact HTML code, but requires on-line connection to load editor JS source)
 See also:
  
write html s_file T_ [ link ... ] - write the html document to a file 
web T_ [ link ... ] - directly show the table in the web browser. 
 Example:
  
 add column t Chemical("CCC") 
 show html t
 
 show iarray
 
 show all integer arrays defined in the shell.  Identical to list iarrayIt shows names, dimensions and the first elements of arrays. 
The I_out array contains the output of some functions and commands and  
is always in the shell.
  
 ii={1 2  3 4 5 6 76} 
 iii=Count(10) 
 show iarray 
 ---------------{iarrays}------------- 
   [1:1]    { 0, ... }    
   ii[1:7]       { 1, ... } 
   iii[1:7]      { 1, ... } 
 show iarray [simple]
 
shows elements of the specified integer array. Option simple skips the header.
 
 
 
 show integers
 show all integer shell variables. 
Example:
  
 show integer 
 ---------------{integers}------------ 
   a                111 
   autoSavePeriod   10 
   defSymGroup      1 
               0 
   minTetherWindow  20 
   mnRemarks        3 
   mnSolutions      50 
  ... 
 
 show labels
 show graphics string labels to find out their number. Then the labels 
can be addressed as label 1, label 2 etc.
 See also: display string_label
 
 
 show libraries
 show loaded  ICM-libraries.  It's a lot of stuff, enter 'q' to exit.
 
 
 show link [ ms ]
 show links between molecules of 3D molecules and corresponding sequences and alignments.
 
 
 show logicals
 shows all logical shell variables in ICM-shell. 
Example:
  
 aa=yes 
 show logical 
 ---------------{logicals}------------ 
   aa               yes 
   l_alignProfiles  yes 
   l_antiAlias      yes 
   l_antiAliasGLfix no 
   l_autoLink       yes 
   l_bpmc           yes 
 ... 
 
 show mol  as_select
 shows selected atoms in the mol file format. 
See also: read mol and write mol.
 
 
 show mol2  as_select
 shows selected atoms in the mol2 -file format (file extension .ml2). 
See also: read mol2 "file" and write mol2 "file" .
 
 
 show molecules
 shows all molecules of all objects currently in icm-shell. 
This command is identical to show a_*.*
 
 
 show objects
 shows all molecular objects currently in icm-shell. This command is 
identical to  
 show a_*.
 The same result is achieved with the  
list a_*. command.
 
 
 show pdb as_select
 show selected atoms in the PDB file format.
 See also: read pdb "file", and write pdb "file".
 
 
 
 
 show pmf
 
shows currently set distance functions between pmf types. See also:
 set pmf and pmf 
 
 show preference
 shows all icm preference variables in icm-shell (e.g.
  
 show preferences 
 .. 
  atomSingleStyle  = "tetrahedron" 
        1 = "tetrahedron" # current choice 
        2 = "cross" 
        3 = "dot" 
 .. 
 
 | show profile,rarray,real,sarray,string | 
 show profile | rarray | real | sarray | string
 shows all objects of specified type(s) in icm-shell. E.g. 
E.g.
  
 show sarray rarray 
 
 
 show residues
 shows all residues in all molecules of all molecular objects. 
This command is equivalent to
  
 show a_*.*/* 
 
 
 show residue types
 shows names and characteristics of compounds described in the icm.res and user ICM residue libraries.
 
 
 show segment [ ms ]
 show segment representation of 3D structure of a protein for the 
selected molecules   ms_  (all molecules of the current object by default).
 See also assign sstructure segment, 
 ribbonStyle, display ribbon.
 
 
 show sequences [selection] [ number ] [ { fasta | swiss | pir | gcg | msf } ]
 show all sequences or the specified sequence seq_ in one of specified formats.  
The default format is the fasta format.  
Option number defines if the residue numbers are added. 
Option selection only shows sequences selected graphically or with the select sequence .. command
 Three logicals: l_showSstructure, l_showSites, and l_showAccessibility 
control the display of a corresponding additional information aligned with the sequence.
 Example:
  
 readUniprot "RXRA_HUMAN" 
 show sequence swiss RXRA_HUMAN 
 
 read pdb "1lbd" 
 show surface area 
 make sequence 
  Info> sequence  1lbd_a  extracted 
 show 1lbd_a  # you see relative accessibilities in 0-9 scale 
 l_showAccessibility = no 
 show 1lbd_a 
 
 
 show stack [ [ i_FromConf ]  i_ToConf ]
 show the following parameters of the conformations currently residing in the  conformational stack.
  
 iconf - a slot number  
 ener  - total energy as calculated before the conformation was stored   
 rmsd  - the distance (either Cartesian or angular RMSD) between the current conformation  
of the object and the stack conformation calculated according to the compare command.  
 naft  - the number of visits AFTER the last improvement of energy 
 nvis  - the total number of visits to this slot; since new conformation are only 
compared with the last stack conformation the conformations may drift and cover a 
large area than described by the vicinity parameter 
 
 
 show [ table header ] table [database] [compress]
 shows the specified table in the ICM table format (one line per table row)  
or ICM database format (a list of column-name column values pairs for each 
entry). 
Options:
 
If you want to shorten the significant digits in real columns, use this trick:
 
add column t {1.333333 2.44444}  # creating some dumb table with one column
t.A = Rarray(t.A 2)  # will trim to 2 sign digits
show t
 See also: show html T_ . 
Database index tables are exceptions, show T_index will show all the entries 
of the related database. To see members of an index table type the index table 
name and press TAB.
 
 
 show terms [ all ]
 shows the active energy/penalty terms.  With option all it shows all the terms available.  
The result is saved in the s_out string. 
You can also use the Info (term) function to return
the term string.  
See also: set terms, Info (term),  delete terms.
 
 
 show tethers [ mute ] [ as_select ] [ r_minDeviation ]
 Shows tethered atoms with deviation larger than r_minDeviation 
(0. by default) and returns these atoms in as_out . 
Option mute is used when you just want to get a selection (as_out) 
of strongly deviated atoms.
 See also: display tethers.
 
 
 | show a full Uniprot entry | 
 show uniprot_index_table_name.ID == s_uniprot_ID [ output=s_string_var_name l_info=no ]
 
stores the identified entry as a text ( ICM string variable ) for further analysis, storage or saving to a file.
 
read index "/data/uniprot/sprot.inx"  #creates sprot index-table 
show sprot.ID == "IL2_HUMAN" output="up_text" l_info=no
write up_text "il2.txt"
 
 
 show version
 show characteristics of the current ICM executable. Part of this string containing 
the version number is returned by the Version( ) 
function.
 
 
 show vrestraint [ vs ]
 shows vrestraints imposed on the internal variables of ICM molecular object.
 
 
 show vrestraint types
 shows types of  vrestraints.  These types are loaded from the icm.rst file.
 
 
 show volume skin [ mute ] [ as ]
 
 show volume surface [ mute ] [ as ] 
 Calculates the volume confined by the solvent-accessible surface 
 or molecular surface (so called "skin"), respectively 
. One optional selection as_1  defines atoms for which the volume is calculated.
If the selection is not specified, the atoms are assumed to belong to the current object. 
The volume will be stored in r_out and the number of triangles used in the  
 skin construction in i_out .
 Examples:
  
 read obj s_icmhome+"crn.ob" 
 show volume surface              # inside accessible surface  
 print "volume inside accessible surface = ", r_out 
 show volume skin                 # inside molecular surface  
 print "volume inside molecular surface = ", r_out 
 
 
 | calculate volume of blobs of map density. | 
 show volume [ map ] [  I_indexBox[1:6] ] [ r_Threshold ]
 Contour electron density map at a given r_Threshold and 
calculate the volume of the high-density blobs. Defaults: 
 
Threshold is expressed in the units of standard deviations from the mean 
map value, i.e. 1. stands one sigma over the mean.  
The volume will be stored in r_out .   
See also: make grob m_ .
 Examples:
  
 read map s_icmhome+"crn.map"     # load m_crn map  
 show volume m_crn 3.             # calculate volume inside the  
 
 
 | show supported pharmacophore types | 
 
 
 show pharmacophore type
 
lists types of pharmacophoric centers and corresponding SMARTS expressions.
 
See also: find pharmacophore
 
 
 
 [ Sort array | sort table | sort table column | Sort object | Sort molecules | Sort stack ]a family of sort  commands (sort objects, molecules in object, array/arrays or sort tables by their columns ). 
 
 
 sort [ reverse ] [ number ] [ history ] sort_key_array [ array2  array3 ... ] 
 sort one or several integer, real or string arrays. The first array is 
the sort key. By default ordering is lexicographic for string arrays and 
by increasing arithmetic value for integer and real arrays.
 Options:
  
reverse: reverse the sense of comparisons. 
number:  enforce sorting according to  arithmetic value for string arrays. 
history: save the old order in I_out ( new[i]==old[ I_out[i] ] )
 See also: Sort . 
Examples:
  
 a={3 2 1 5 7 4 6} 
 b=Sin(a*50.) 
 c={"three" "two" "one" "Five" "Seven" "four" "Six" } 
 show column a b c 
 sort a b c 
 show column a b c 
 sort reverse b a c 
 show column a b c 
 sort c b a 
 show column a b c 
 
 sort [ reverse ] [ number ] [ history ]  table.keyArray1 [ reverse ]  table.keyarray1 [ reverse ] ...
 this command sorts all the arrays of the table so that all the listed table.keyArrays  
are applied sequentially with descending priority.  
Each array can be followed by the reverse option to change the sorting order.
 Examples:
  
 read table s_icmhome+"res.tab"  # residue properties 
 RES = $s_out  # create an ICM table RES 
 sort RES.aa             # resort entries by residue name 
 show RES 
 sort reverse RES.flexInd RES.aa 
 show RES 
 sort RES.hPhobInd  RES.flexInd 
 show RES 
 
See also: sort column table
 
 
 
 
 sort column tab [ function = s_expr ] [ reverse ] [ name = S_cols ] [ selection ]
 this command sorts table columns by column names (the default) or by custom function/expression.
 
Options:
 
reverse   : option to change the sorting order
selection : option sort only selected columns
name      : specify sarray of column names to sort
function  : specify function or expression to reduce muliple values in a column to a single number per column (or a string) by which the columns will be sorted, e.g. Min(COL) means that for each column calculated the minimal value use that in sorting. (See add column function for detailed description of available functions)
 
The functions in the function= argument can be of three different origins:
 Examples:
  
makeTable "t" 10 0 0 3 no no no yes 
sort column t function="Icm::Min(COL)"   # Sorts by minimum value ('COL' refers to the current current column)
sort column t name={"B","C"} function="Icm::Corr(COL,A)" reverse  # Sorts columns 'B' 'C' by correlation to column A
# select columns first then sort the selection
add column t 'john'//'jack'//'mike' 2.//4.//2. 3.//5.//2.  6.//7..//8.
select column t rarray   # leaves non-numeric columns alone
sort column t selection function="Icm::Mean(COL)" reverse
 # takes a mean of each column and sorts column by that mean
 
 
 | sort and reorder molecular objects | 
 sort object os_ i_pos
# move selected objects to a give position
 
 sort object R_key|I_key [reverse]
# reorder objects by an array, e.g. sort object Mass(a_*.)
 
 sort object S_key [reverse] [number]
# option number interprets the string array as numbers
 
 sort object [field = i_Field] [reverse] 
 resorts all molecular objects by the specified user field 
(see the set field command, and the Field function). If the field 
is not specified, the objects are sorted by their mass.
 
 | sort molecules in an object by mass or a user field | 
 sort os_ObjectSelection [ field = i_Field ]
 resorts the molecules in each of the selected non-ICM objects by the specified user field 
(see the set field command, and the Field function). If the field 
is not specified, the molecules are sorted by molecular mass. 
An ICM object can be stripped, resorted and then  converted again.
 
 
 | Sorting a stack of conformations | 
 sort stack
 sorts  conformations in a stack according to their energies. 
New energies can be assigned to the same conformations with the set stack energy command.
 
 
 
 [ split grob | Split group | Split group array | Split sequence | Split table cell | Split object to molecules | Split tree ]can split  grobs,  tables into individual components, hierarchical data tree 
 into clusters and DNA/RNA sequences (or protein) by multiple-N stretches. 
 split g_complexGrob [ s_rootGrobsName] [ i_maxNofGrobs] [ r_minNofPointsInGrob ]
 divides disconnected parts of a  graphics object into a bunch of separate graphics  
object sorted according to their size (measured as the number of vertices).  
The maximal number of new grobs is defined either by i_maxNofGrobs 
explicitly or by the MnGrobs parameter.  
The latter can be redefined in the icm.cfg configuration file.   
The i_maxNofGrobs option allows one to retain only larger pieces. 
Grobs will be sorted according to their number of points and 
named by adding their sequential number to the input grob name or  s_rootGrobsName, if specified.
 The split command is used in protein  cavity analysis and other applications where 
one needs to treat, display, and measure disconnected parts separately.  
You can also limit the number of points of the grobs generated by the command by providing 
the real argument with the minimal number of vertices you want in a grob.
 See also: Volume( g_), Area( g_), Xyz( g_).
 Examples:
  
 read object s_icmhome + "crn"   
 make grob skin a_//cb a_//cb name="g_crn"
 split g_crn 
 display grob smooth # display as one smooth surface 
 undisplay g_crn  
 color grob unique 
 show Volume(g_crn3) Area(g_crn3)
 
 
 read map s_icmhome + "crn" 
 make grob 
 split g_crn "blob" 30    # create up to 30 largest grobs and 
                          # call them "blob1" "blob2"... 
# a variant: split g_crn "blob" 40 100.0  # discard grobs smaller than 100. vertices 
 delete g_crn 
 display grob 
 color grob unique 
 split g_Grob M_xyz_3_plane_points
 
splits grob by plane defined by 3 points in M_xyz_3_plane_points.The result of the command is two new grobs with suffix _1 and _2 
 
 
 ball1 = Grob( "SPHERE" , 1. , 10 ) +  {0. 0. 0.}        # ball is centered in {0. 0. 0.}
 split ball1 Matrix( { 0. 0. 0. 1. 0. 0. 0. 1. 0. } 3 )  # splits by XY plane
 display ball1_1
 display ball1_2
 
 
 | split group : derive replacement group arrays from a combinatorial library and a scaffold. | 
 
 
 split group chemicals_with_common_core_mol auto|scaffold_markush.mol [name=s_R_group_table_name]
 
idenfitying all R-groups in an array oc chemical structures with a common core and generating a table. This is an operation inverse to the enumerate library command. Input: 
 
Output:a library with a common scaffold
an option auto or an explicit chemical array containing one the scaffold Markush 
 
a chemical table containing an array of replacement groups R1 , R2 ...
 
With auto option no explicit R-group locations in a Markush structure are needed. 
The command will automatically find attachment positions and create appropriate columns. 
Columns which are invariant (no changes of substituents) will be excluded.
 
Example:
 
smi = {"C1CCC2C(C1)CCCN2", "CCC1CCCNC1C1CCCCC1", "CC1CCCNC1C1CCCCC1", "C1CCC(CC1)C1CCCCN1"}
add column t Chemical( smi )
split group t.mol Chemical( "C1CC(C(NC1)[R2,H])[R1,H]" ) name="tt"
See also: enumerate library , make reaction , Replace chemical , Find chemical ,  SAR analysis 
 
 
 | Splitting a table to column arrays | 
 split T_table_with_more_than_one_column
 split the table into individual arrays with the names corresponding to the names of table columns (e.g. A, B). If the operation is successful the source table will be deleted after the array generation.
 
If an object with the same name already exists in the shell, the command will report an error.
 Example:
  
 add column t {1 2 3} {22 33 44} name={"aa","bb"}  # t.aa t.bb arrays  
 split t         # aa and bb arrays and t is deleted
 
 | Splitting a sequence to domains between NNN. runs | 
 
 
 split sequence_with_NNruns [i_minlen_of_Nrun]
 
the sequence will be divided into smaller sequences between NNN.. runs. By default even a single N is a separator. Nowever one can
specify the minimal length of the N-run as the second argument.
Example:
 
a=Sequence("AAANNAAAAAAAAAAAAAANNNNNNAAAAAAAAANANA" nucleotide )
split a 3
show sequence
 | Splitting multiple values in each cell of a column into single-value cells by multiplying rows. | 
 split [ tableColumn ] [ separator= character ]
 For sarray column takes each string of the specified column and splits it by the separator  
(comma is the default separator, e.g. separator="," ) 
The rows are multiplied accordingly. Example:
  
group table t {1,2} {"a,b,c","d,e"} 
t 
 #>-A-----------B---------- 
    1           a,b,c 
    2           d,e 
 
split t.B separator="," 
t 
 #>-A-----------B---------- 
   1           a 
   2           d 
   1           b 
   1           c 
   2           e 
Note that extra columns are appended to the original table (that explains somewhat strange order).
Can also be used with parray column or chemical column with embedded stacks
 
Example:
 
# group conformers by MOL_NUM aggregating conformations into stack
group conformers.MOL_NUM conformers.mol "conf_concat,"  all "first"  header  name="conformers_stack"
# split back
split conformers_stack.mol
 
 
 
 | Splitting an object into separate molecules | 
 split object
 There is no such command, however there are two useful ICM-shell macros that you may call.
 
 moveMol ms_to_be_moved [ s_objName_for_moved_molecules ] ("")
 
# if a new object name is not specified, the source object name will be appended with a modifier
 
 splitByChain os_object_to_be_split l_delete_source (no) l_fixOrphans (no) l_retainFirstChainOnly (no)
 
#  This macro may also assign a ligand without any chain annotation according to proximity to the larger "chained" macro-molecule. The new object names will use the original object name with appended chain name.
 
For example:
 
 read pdb "3fuc"
 splitByChain a_ yes yes no # you get three objects with individual chains and delete the original one
 
If you want to edit a molecular object or split it manually in one, or a groups of molecules, you can simply copy the object and delete unwanted molecules in each copy. 
Example:
  
 copy a_ "b" 
 delete a_b.!1  # delete all but the first molecule 
 write a_b. "b" # contains only the first molecule 
# 
 copy a_ "c" 
 delete a_c.!2  # delete all but the second molecule 
 write a_c. "c" # contains only the second molecule 
#etc.. 
 
 
 | Changing the position of tree cursor (separator) and calculating new cluster numbers | 
 
 
Rows of a data table or a chemical table can be organized into a hierarchical tree which is stored
in the table.cluster array of the table header. This can be done with the
 make tree command which also creates a column with cluster group indices.
 The name of that column can be obtained with the Name( table.cluster i_cluster split ) function.
 The tree can be used to determine clusters at different distance levels. 
 
The threshold distance at which the clustering is made can be reset with the 
 
 split table.cluster i_cluster r_newSplitDistance 
command. This command also recalculates the cluster numbers.
 
E.g.
 
 split T.cluster 1 0.14 # take the 1st tree and set distance threshold to 0.14
 
See also  Split function 
 
 
 sprintf [ append ] s_formatString arg1 arg1 arg2 arg3 ... [ name= s_outputStringName]
 Print to the s_out string, or the s_outputStringName specified  
after the name= option.  
The same syntax as printf command, but the result is not displayed.
 Example in which string outStr is the destination:
  
 sprintf "mncalls = %d\n",mncalls name="outStr"  
 
 
 
 [ store conf | Store stack object | store frame ]store things to internal memory structures. 
 store conf [  i_slotNumber ]  [ os_obj ] [s_comment]
 
 store conf i_slotNumber { r_energy | number= i_nOfVisits }  [ os_obj ] [s_comment]
 
 store conf atom os_obj # add atom information about masked out atoms
 store current conformation into specified slot of the  conformational stack.  
By default it puts the conformation into the first free slot, or appends it to the end. 
The energy, by default, is automatically extracted from the previous energy evaluation, 
or taken from r_energy if explicitly provided. The total number of visits ( nvi ) is set to 
1 by default.
 
if the os_obj argument is provided the conformation will be added to the local stack in the object.
The atom option for object-stored stack needs to be applied for the very first conf to initiate a section for atom-mask information. See also dock7stackSCARE in _docking file. 
 
Example:
  
 build string "WSD"     
 montecarlo           # generates a stack 
 show stack 
 set v_//omg 180.     # change a conformation 
 store conf -9. "mycomment"      # add conformation with energy -9. and comment string
 store conf 3, -9.    # override slot 3 with energy -99. 
 store conf number=33 # set conf with number of visits=33  
See also set stack property array_of_values command , e.g. 
set stack energy Random(0., 10., Nof(stack))
for multiple assignments of energy values, number of visits or total number of visits. 
If os_sel argument is provided the conformation will be stored into a object's stack (see
also store stack os_ to move the whole stack to the object).
 
See also: store stack os to copy the global stack to an object
 
 
 
 | store conformational stack inside an object | 
 
 
 store stack os 
 
takes the current stack and stores it in a compressed form inside the specified object. 
The compressed stack can then be extracted with the load stack object command. 
Option stack of the
montecarlo command stores the generated stack inside the current object automatically. 
 
See also:
 
 
 
 
 
 store frame [write] [ append ] 
 
stores the current conformation to a trajectory file. 
 
Options:
 
The advantage of the trajectory file is the possibility of interpolated display as a trajectory animation.
See display trajectory .append  : appends to previously existing file
write   : closes the movie file 
 
Example in which we create trajectory from a stack:
 
for i=1,Nof(conf)
  load conf i
  store frame 
endfor
store frame write
#
display ribbon
display trajectory sstructure 20. 40.
 
 
 
 
 
 is a systematic search through torsion 
space combined with local minimization.
  
 you may globally optimize any set of energy/penalty terms including  
electrostatics, solvation, entropy, density correlation etc. 
 you may search an arbitrary subset of variables 
 you may allow full local minimization after each systematic change 
 you may search only through centers of the preferred local multidimensional zones 
(for example rotamers) which is more efficient than an even grid sampling 
 you may perform both the global search (the full [-180.,180.] range) 
and the local search ( grid search around the current conformation). 
 ssearch [ local ] [ residue ] [ vs_Ssearch [ vs_minimize ]] [ as_select1 [  as_select2 ]]
 systematically changes vs_Ssearch variables and carries out 
energy minimization with respect to the vs_minimize variables 
after each systematic conformational change.   
The lowest energy conformation is loaded from the conformational stack at the end of the procedure. 
By default every variable from vs_Ssearch selection goes through nSsearchStep evenly distributed values.  
The step therefore is 360 deg. over nSsearchStep.  
Option local imposes the grid locally around the current values of vs_Ssearch variables.  
In this case the program uses ssearchStep parameter.
 If you want to prevent the procedure from automatically writing  
the stack of best conformations to a file  
set the autoSavePeriod variable to zero.
 
Option residue allows one to searche each variables of each residue independently.
 See also montecarlo .
 Example:
  
 read object "crn"  # good old crambin  
 ssearch v_/14/x*   # place optimally Asn14 side-chain 
 ssearch residue v_/tyr/x*   # loops through tyrosines and ssearch each separately/
# ssearch residue simple vs_  # GAP model only 
 
 
 strip os_object [ virtual ]
 strip an ICM-molecular object from its ICM attributes and reduce it into 
a pdb-object. The latter are still good for graphics, superposition, 
basic geometric manipulations etc. Also, some chemical operations, 
e.g. attaching chemical groups are best performed on simpler pdb-objects. 
Stripping may save you a lot of memory as well.
 Option virtual tells the command to delete the virtual atoms upon conversion. 
The virtual atoms ( selected as a_//vt* ) are always present in the ICM object,  
but are not necessary in the stripped object.
 String is also used to perform operations which are not allowed for 
ICM object, but are allowed for simpler PDB objects (for example 
dragging individual atoms with a mouse)
 These commands include:
  
After you have done editing the stripped (non-ICM) object, you may convert it back to a fully functional one by the convert command it its simplest form (do not need a convertObject macro)deleting hydrogens 
make bond auto  
 Example:
  
   build smiles "c1ccccc1" 
	 strip a_ virtual 
 
 
 
 [ alignment-options ]superimpose [ [ align | residue | ali ] [ exact ] [minimize] ] as_selectStatic as_selectMovable superimpose os_static I_atomNumbers1 os_movable I_atomNumbers2
 superimpose as_movableByTethers  [ reverse ]
 
 superimpose chemical [output] | pharmacophore as_selectStatic as_selectMovable 
 
 superimpose P_atompairs os_movable
# e.g. superimpose distpairs a_1.
 optimally superimpose the second movable object onto the first one using selected atoms or 
residues as equivalent points. At least one pair of equivalent atoms needs to be 
provided.
 
Option minimize iteratively finds the best subset of atom pairs (see superimpose minimize )
 
Option residue skips residue alignment by sequence or numbers and aligns them sequentially as selected. The atoms are aligned by name. Use option minimizewith it.
 
Option reverse in superimposition by tethers moves the 'template',
rather than the selected object.
 
The P_atompairs argument allows one to superimpose by an arbitrary set of atom pairs. The atom pairs can be created with
the make distance command or picked in GUI with the distance tool.
 
 
 
Selections may by of any level: 
 
atom selection  as_ , 
residue selection  rs_ , 
molecular selection  ms_ 
object selection  os_ . 
 
Example in which we will superimpose the selection of the binding site residues.
Perform the following steps:
 
The second molecule can also have a selection, then the intersect of the two selections will
be used for superposition.generate a master sequence alignment, e.g. 
read pdb "1ql6"
read pdb "2phk"
make sequence a_*.1
Sequence(a_*.1)
alig = Align( 1ql6_a 2phk_a )
Edit this alignment if necessary (usually you do not need to do it)find the selections for the binding pocket in one or both molecules, e.g.
bindpock = Sphere( a_2phk.atp a_2phk.a 10. )
Align by this residues, keep the a_2phk. object where it is and change the coordinates of a_1ql6. :
superimpoase bindpock a_1ql6.a alig
If you do not care about the alignment, it can also be generated on the fly with the align option
instead of the alignment name. 
The option defines how the two sets are aligned (the residue alignment may 
be explicitly provided as the ali_ argument, and the objects are linked 
with the alignment): 
 
chemical option can be used to superimpose small molecules. In this mode atom equivalence can be found
either by substructure search or (if none of molecules is substructure of other) by common substructure search algorithm.
Other feature of chemical mode is that it enumerates topologically equivalent atoms to find best superposition.
 
Option output (with option chemical) produces R_2out array with individual deviations.
 alignment options:
 
  
Default (no options): Residue alignment: by residue number. 
Atom alignment: by atom name for pairs of identical residues or 
pairs of close residues (F with Y; B with D,N; D with N; E with Qor Z, 
Q with Z), for other residue pairs only the backbone atoms ca,c,n,o,hn,ha 
are aligned. 
align option: Residue correspondence is established by sequence alignment 
using the ICM ZEGA alignment  Abagyan, Batalov, 1997 
Atom alignment: by atom name (see the default option). 
exact option: Residue matching is ignored. Two atom selections 
are directly sequentially aligned. Numbers of atoms in two selections 
must coincide. 
align exact option: Residue alignment:  Needleman and Wunsch. 
Inside residue atoms are aligned sequentially and regardless of the name. 
 Number of equivalent atom pairs is saved in i_out; resulting RMSD is saved in 
 r_out; a selection of atoms in the "static" object used for superposition is 
saved in as_out, that of "movable" object in as2_out .
 Virtual atoms. Be default, the first two virtual atoms ( vt1 and vt2 ) are automatically 
excluded from both selections unless the virtual option is explicitly specified.
 Note that if the movable object is of ICM-type it is preferable to have all six 
 virtual variables unfixed ( e.g. unfix V_movableObj.//?vt* ). 
Otherwise, if some or all of them ( V_//?vt* ) are fixed, you will get 
a warning, and only the partial minimization of the RMS distance possible 
with the given degrees of freedom will be performed.
 If the explicit order of atoms is specified and two single object selections  
are provided, e.g.
  
superimpose a_a. a_b. {3 5 7} {10 3 5} 
the superposition will be performed in the specified order.The following output is produced:
 
i_out : the total number of equivalent atom pairs superimposed (it is also equal to Nof(as_out) )
r_out : the rms deviation for all equivalent atom pairs
as_out and as2_out : gives the equivalent atoms in two objects. 
R_out array of 12 elements returns the superposition transformation vector for the transform command.
with option output the actual deviations upon superposition will be returned in R_2out . This command will create table DEV of atomic deviations:
  add columnt DEV Sarray(as_out) Sarray(as_2out) R_2out
 
See also: Rmsd( ), Srmsd( ) , superimpose minimize . 
 
 
 | Iterative search of the best atom pair subset for superposition. | 
 
 
 superimpose as1 as2 minimize  options
 
This procedure attempts to find the better "alignable" core in both structures after 
the atom equivalences have been established. This is important if
there is a minority of atom pairs that are really different in two selections and this minority
messes up the superposition and the RMSD values. Examples of that such movements 
include moving side-chains, loops, tails, etc.
 
Theory 
The algorithm resembles the one published by Damm and Carlson in Biophys.J 2006,90,4558 with a few modifications,
namely the adaptable st.dev. for the gaussian distribution (step 5) and the way the weighted Rmsd is calculated
(in ICM it is divided by the sum of weights, rather than by n).  The adaptable denominator in the distribution ensures
a better quality superposition.
 
The ICM procedure uses the weighted superposition and the following procedure:
 
Start from two aligned or equivalent atom arrays A and B 
 The atom equivalences established according to residue numbers, alignments, atom names etc. (see superimpose options ). 
set all weights to 1.
perform weighted superposition (and evaluate Rmsd, R ).
 
Calculate the deviations Di for each atom pair i .
Sort the deviations and find the deviation Dx corresponding to the X-quantile (the
 TOOLS.superimposeMinAtomFraction parameter). 
  E.g. if this parameter is 0.5, you will find D50, the 50-percentile of the deviation array.
calculate the weights W according to following formula:
  Wi = exp(  - D2x / D2i  ) small deviations compared to this adaptable mid-scale deviation will get weights
close to 1. while larger deviation will get progressively smaller weights 
go back to step 3 unless the iteration limit TOOLS.superimposeMaxIterations is reached or RMSD is not 
 improved any more.
 
This procedure will gradually find the alignable core that will cover at least X % of 
the pairs.
  
  The -minimize principle is also implemented in the Rmsd function. 
 
  To calculate RMSD values of different subsets of atoms one can use the Srmsd function after 
this molecules are superimposed.  
 The l_info variable controls if the iterations are shown .
 
 The following output is produced:
 
i_out : the total number of equivalent atom pairs superimposed (it is also equal to Nof(as_out) )
r_out : the weighted rms deviation for ALL equivalent atom pairs
i_2out : the number of equivalent atom pairs that define the core for which the unweighted rms is calculated
r_2out : the unweighted rms deviation for the 'core subset' of atom pairs deviating less than TOOLS.superimposeMaxDeviation 
as_out : is returned in the superimpose command and gives the atoms
in the static object that have 'equivalent' counterparts in the other object. i_2out/Real(i_out)  will give you the fraction 
of equivalent atom pairs in the core
R_out array of 12 elements returns the superposition transformation vector for the transform command.
with option output the actual deviations upon superposition will be returned in R_2out . This command will create table DEV of atomic deviations:
  add column DEV Sarray(as_out) Sarray(as_2out) R_2out
 
See also :
 
 Rmsd( as1 as2 minimize [option] )
 Rmsd( as1 tether minimize )
 Smsd( as1 as2 option )
 
Parameters for the minimize option of the superposition:
 
 
 
 
 | sys (or unix): system command | 
 sys   system_shell_command  
 unix  unix_shell_command
 issues a system shell command from ICM.  You may use sys or unix 
interchangeably. However, every time your ICM script makes a system call, ICM spawns a new process.
Keep in mind that some simple external operations on files and directories are possible without the thread-spawning unix command. Here is the list of what can be done without it:
 
| command | comment | unix equivalent | example | 
|---|
 | delete system s_file | delete a single file | rm file | a="1crn.ob"; delete system a |  | rename system s_f1 s_newname | rename/move a single file | mv file1 file2 | rename system "1crn.ob" "1crn_old.ob" |  | copy-systems_f1 s_f2 | copy a single file | cp file1 file2 | copy system "a" "b" |  | set directory s_dirname | change directory (cd) | cd dirname | set directory "./DOCK1" |  | make directory s_dirname | make a directory | mkdir | make directory "NEW" |  | Path ( directory ) | returns the path to the current directory | pwd | s_currDir = Path(directory) |  | Sarray ( s_filename_filter directory [ all ] ) | returns the file list array, all goes to subdirectories | ls -1 [-R] name_pattern | a = Sarray("*.icb" directory) |  
Back to the sys command.
By default, the ICM process waits until the system 
shell process has completed. sys must be the first word in the command. 
Important: Construction 
  
 if ( <condition> ) sys system_command 
is illegal. Use 
  
 if (  <condition> ) then 
    sys system_command 
  endif 
instead.  
  For cross-platform compatibility, also use the following portable  
ICM shell variables instead of non-portable system-specific commands: 
 s_sysCp , s_sysLs  , s_sysLtt , s_sysMv , s_sysRm. 
Example: 
 sys $s_sysLs   # cross-platform portable list command 
 sys ls         # non-portable unix only ls command 
 As you might have guessed from the above example, 
to pass the ICM-shell variables to the system_shell_command  
one may use integer, real or string ICM-shell variables,  
protected with dollar sign ($) prefix. 
Important:  passing ICM-shell variables to the UNIX command is impossible if you use an alias name  
(e.g.  ux) instead of the original unix command.
 Examples:
  
 unix grep -i myoglobin /data/pdb/brookdir.doc 
 unix echo $mncalls $s_pdbDir $dielConst 
 
 file="/data/pdb/"+Name(a_1.)     # tricky file name  
 unix grep ATOM $file | wc -l     # $file will be substituted by  
                                  # the value of this ICM-shell  
                                  # string variable  
See also:
 
 
 
 [ test binary ] 
 test l_val | i_val
 
This command produces an error if the condition passed to it as anrgument is not true.
It is convenient for writing testing frameworks 
and debugging scripts.
 
Examples:
 
test yes
test no
test 2==2
test 2==3
 
 test real r_v1 r_v2
 
 test exact I_v1 I_v2
 
 test exact S_v1 S_v2
 
 test real R_v1 R_v2
 
 test real M_v1 M_v2
 
 test exact T_v1 T_v2
 
These commands test two objects to be identical. 
For real values, the comparison is made with a certain tolerance.
Tables with advanced parray columns may not be properly supported.
 
Examples:
 
test real {2. 4.}  2.*{1. 2.}
test exact {2 4}  2*{1 2}
 
 
 
 test binary s_file1 s_file2
 
Tests two files to be identical.
 
 
 is one of the ICM flow control 
statements, used to perform conditional statements.
 See also if, elseif, and endif .
 
 
 
 [ Transform sarray | Transform ] 
performs transformations of 3D objects or string arrays in place. The geometrical transformation is defined by
the transformation vector .
 
 | transform string arrays in place | 
 
 
 transform sarray S_array "tolower"|"toupper"|"trim" 
 
This command will transform elements of string arrays or text columns of tables
in place. Three transformations are currently possible:
 
"tolower"
"toupper"
"trim"
 
Example:
 
read table s_userDir + "inx/PDB.tab"
transform sarray PDB.head "tolower" # in place
 
 
 | transform molecular objects or grobs | 
 
 
transform molecular objects to symmetry related positions. 
 transform {ms|g_grob} R_12transformationVector
 
transform molecules (  ms_ ) or graphics objects according to the   transformation vector. 
 See also these two examples: (  example 1 and  example 2).
 You can also manually move molecules with respect to each other on the graphics screen by using the 
 connect ms_ command to choose the molecules which can be moved separately.
 transform ms i_transformationNumber [ translate [= <{x,y,z}> ] ]
 transform molecules  ms_ according to the specified transformation. 
 i_transformationNumber is a symmetry operation number in an array of all operators of 
a space group. The first transformation usually keeps the object in place. 
The symmetry transformations are defined in a 12*n real array where 
each chunk of 12 real values defines 3x3 rotation matrix and translation 
vector {a4,a8,a12}. The complete 4x4 transformation matrix looks like this:
  
   a1  a2  a3  | a4   
   a5  a6  a7  | a8   
   a9  a10 a11 | a12   
   ------------+---- 
   0.  0.  0.  | 1.    
 
If i_number exceeds the number of space group symmetry transformations the  
symmetrical images in up to 26 surrounding cells are created. This operation is only 
possible, if symmetry information (sym.group name and cell dimensions) is defined 
for the object. Usually PDB and CSD files contain the above information, it is 
preserved upon conversion. 
Use the Cell( ) or the Symgroup( ) functions to find out if the space group is defined. If not, you may assign it to the object with the set symmetry object 
command. In a special case of i_number=0, the object is placed in the 
"primary" subunit of the cell (e.g. in sym.group "P 21 21 21" 
that is 0<x<a, 0<y<b, 0<z<c/4; currently, the i_number=0 option is 
supported only for groups 1 and 19). 
 
Option translate tells the command to shift the transformed coordinates back to the vicinity
of the source coordinate set ( translate ) or to the vicinity of the {x,y,z} point provided.
 Example:
  
 read pdb "1sre"    
 copy a_1. "a1"
 transform a_a1. Transform(a_a1.)[13:24]  #  Trasform with R_12transformationVector
 copy a_1. "a2"
 transform a_a2. 3                        # same using i_transformationNumber
 
See also Transform
 
 
 translate {  os | ms |  g_grob .. | origin } { add R3_transl_vector | R3_destinationPoint | M_xyz  [symmetry]
 translate the center of mass of the specified object(s) (  os_ ) or molecule(s)  
(  ms_ ) to a specified position, or, with the add option, by a R_3translationVector vector. 
If a Nx3 matrix is specified, the mean vector is calculated.
You can also move molecules/objects interactively with the mouse after the connect command. 
Without the add option, the translation
 symmetry  option With the symmetry option the R_3translationVector should be in fractional coordinates. 
Option add translates by the specified vector from the current position. 
Without add the program tries to identify a compensating shift to a position in which  
the center of gravity of the selected molecule(s) has minimal positive fractional coordinates.
 Examples:
  
 read pdb "1fbi" 
 delete a_!p,q,y  # get rid of redundancies 
 copy a_ "a1"
 translate a_a1. add symmetry {0., 0., -1.} #  shift whole object by fractional coordinates
 cool a_ 
 for i=1,10 
   translate a_y add {0., 0., 0.9}  # shift molecule y  by an increment 
 endfor 
To calculate a displacement vector, follow this example in which we calculate 
a translation vector for molecule y :
  
 read pdb "1fbi" 
 delete a_!p,q,y  # get rid of reduncancies 
 cool a_ 
 v1 = Rarray( Xyz( a_y/1/ca ) )  
 connect a_y  # now drag the molecule with the middle button and press Esc 
 v2 = Rarray( Xyz( a_y/1/ca ) ) 
 vtrans = v2 - v1 
 
 
 undisplay [[ms] store] args
 Opposite to display .
 
The store option preserves colors and representations so that they can be restored by the
next display command.
 Examples of the undisplay command:
  
 undisplay store a_1,2         # undisplay the two molecules and memorize their appearence
 undisplay ribbon              # ribbon display not needed any more 
 undisplay g_icos              # a graphics object not needed any more 
 undisplay a_/w*,hoh*          # who cares about water molecules ... 
 undisplay residue labels      # just "labels" will do the same  
 undisplay string              # see also "delete label" command 
 undisplay a_//h*              # who cares about hydrogens ... 
 
 undisplay hbond a_1./1:29     # ... and, hence, about H-bonds  
 undisplay tether a_/12:20 
 undisplay box                  
 undisplay cursor
 undisplay origin              # undisplay the coordinate frame 
 undisplay volume              # deactivate the fog effect
 undisplay window                       
To get rid of the whole graphics window for fast calculations use:  
 undisplay window     		# delete GL graphics window 
 
 
 
 
  undisplay window 
 
  This command deletes the 3D graphics window. It may be used to speed up the calculations by
avoiding the re-drawing operations. This command can also be applied from  Windows menu 
of the GUI interface
 
See display window
 
 
 unfix [ only ]  Vs_select
 unfix (set free) specified variables (such as bond lengths, angles and 
phases or torsions) in an ICM-object. Opposite to fix command.  
This operation can be applied to the current object 
only (use set object os_newObj  first).
 Important: since it only makes sense to unfix variables which 
are currently fixed, use all variable selection starting with capital V 
which selects among ALL (both free and fixed) variables,  
as opposed to vs_ which selects only from FREE variables.
 Examples:
  
       # only this loop has free torsions now 
 unfix only V_/8:18/phi,PSI,H,M,P  
Note that PSI torsion references is used for traditional residue attribution
 
 wait for the child ICM processes to finish, quit the child processes
 wait [pipe]
 allows one to synchronize multiple ICM processes spawned by the fork command.
  
 for the parent process: wait until all the child processes spawned with the fork command are finished. 
 for the child processes: quit the spawned ICM process 
 
With pipe option the command will synchronously prints the output from all child processes launched 
with  fork pipe 
 
See $ICMHOME/molpipe/molto3d.icm
 
See also: fork , wait , l_out (defines the parent),  Index( fork [system|all] ) . 
 
 
 
 
 [ Web table ]web s_url 
invokes an external  web browser call to WWW page or local file (Html, Pdf etc).
Can be used e.g. to link ICM table entries to NCBI, PDB etc. databases
 
Example:
 
s_ncbi= "http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?db=protein&val="
web s_ncbi+"Q28509"
 
 
 
 | web table: shows an icm table with a web browser | 
 web [ delete ] [ s_file]  T [  link  T.S_1  s_linktype1  T.S_2  s_linktype2 ... ]
 The command presents the T_ table in your web browser window. Optional web links are 
interpreted according to the web link types described in the WEBLINK.DB array.
 If the table contains chemicals, ICM creates a file with the compound images using 
Peter Ertl's JME classes (see also the s_javaCodeBase variable).
 
 Example:
  
 read sequence "zincFing.seq" 
 find prosite 1znf_m 0.3           
 show SITES  
 web SITES link SITES.AC "AUTO" 
 
See also: 
write html  , show html 
 
 
 while
 is one of the ICM flow control statements, used to perform a loop 
in the ICM-shell calculations.
 See also: for, endwhile .
 
 
 
 [ write alignment | write binary | write iarray | write rarray | write sarray | write matrix | write molcart | Write array | Write tether | write table | Write table mol | write column | write database | write drestraint | write drestraint type | write factor | write gamess | write grob | write html | write image | write 2D image | Write image chemical | write alignment image | write index | write index blast | write library | write map | Write model | write mol | write mol2 | write movie | write object | write object simple | Write object parray | write pdb | write png | write postscript | write pov | write sequence | write session | write stack | write system preference | write vs_var ]write stuff to a file. Logical variable l_confirm 
defines if you'll be prompted whether to overwrite an existing file with the 
same name. Use option delete to delete (or overwrite) the existing 
file unconditionally. For the list of ICM-objects you can write, and formats you can choose, see read and show commands.  
Generic syntax:
 write [binary] [ append | delete ] { variable | constant | expression } s_fileNameRoot[.ext]
 With the binary binary option multiple objects or classes of objects can be writtin into 
a single cross-platform compatible binary file.  To read it use read binary and to read the
table of its contents use read binary list .
 
Common options:
 
append - appends to an existing file or creates new
delete - overwrites an existing file
 See also corresponding read commands.
 
 
 write [ alignment ] [ msf | fasta ]  ali_Name [ s_fileName] [ SEQUENCE.restoreOrigNames=yes|no ]
 write alignment ali_Name to a file. Default extension is .ali . 
Note: if alignment is only a group of unaligned sequences, 
generated by the group command, the result will be just a 
 multiple sequence file, rather than an alignment file 
(there will be no dashes at the end).
 The default ICM format for an alignment looks like this:
  
#>ali sh3 
# Consensus       ...#.^.YD%..+~..-#~# K~-.#~##.~~..~WW.#.   ~~.~ 
Fyn           ----VTLFVALYDYEARTEDDLSFHKGEKFQILNSSEGDWWEARSLTTGET 
Spec          DETGKELVLALYDYQEKSPREVTMKKGDILTLLNSTNKDWWKVE--VNDRQ 
Eps8          KTQPKKYAKSKYDFVARNSSELSM-KDDVLELILDDRRQWWKVR---NSGD 
#Fyn              __EEEE__________________EEEEEEE____EEEEEE_____E 
 
# Consensus   G%#P...#..#. 
Fyn           GYIPSNYVAPVDSIQ 
Spec          GFVPAAYVKKLD--- 
Eps8          GFVPNNILDIMRTPE 
#Fyn          EEEGGGGEEE_____ 
 
# nID 7 Lmin 61 ID 11.5 % 
 The lines starting from hash (#) are comments and are not required
 The length of each alignment block is controlled by the sequenceLine parameter (default value is 60).  
If you want to save a long alignment as one unwrapped block,  
increase this value (e.g. sequenceLine=1000 )
 Writing sequences in the alignment order
 The sequences can be written in the alignment order with the following commands 
(they can be store in a little macro)
  
 macro wrSeqAli ali_ s_file ("seq.fasta") 
  l_showSstructure = no 
  seqname = Name(ali_) # Name returns sarray of sequence names 
  for i=1,Nof(seqname)   
    write sequence fasta append $seqname[i] s_file 
  endfor 
 endmacro 
Resorting alignment in the order of sequence input.
 Upon alignment the source sequences get reordered according to similarity. 
	If you want to keep the original order you may use the reorderAlignmentSeq macro  
	described in the Align( ali_ I_newOrder ) section 
and then write an alignment:
  
 read sequence s_icmhome+"zincFing" 
 group sequence aaa 
 align aaa 
 reorderAlignmentSeq aaa 
 write ali_new    # reordered alignment 
 
restoring the original name of the genbank sequencesThere is a method to swap the ICM names of sequences with the names stored in the form of the comment containing
 this text " Orig.name: "other_seq_name  . If this comment exists (can be set with set comment seq s )
 See also: SEQUENCE.restoreOrigNames ,  String( ali_) function.
 
 
 write binary [ class1 class2 ... ] [ os_objects [tether] obj1 obj2 ... ]  [ s_fileName |stdout ]
 
 write binary all [ key=s_password] [ s_fileName | stdout ] [ read only ]
 The default file name is "icm.icb", and the default extension is 
 .icb  (stands for ICm Binary file). 
The system objects or the objects with propertywrite specified ICM shell objects or all objects of a classes to a 
single, binary, cross-platform file, or more accurately, database. 
The following data types are currently supported:
 h4-- Making a table of content of any icb file, and reading only certain ICM objects
The catalogue of the database can be obtained with the list binary command. 
The same list can be extracted into a table with names one can use to extract only objects of interest from an .icb file. E.g.
 
list binary "myfile.icb" name="Toc" # just look at it in ICM terminal
read binary list "myfile.icb" name="Toc" #extract to table named Toc (.name, .type, .size)
read binary "myfile.icb" name="7cpu" # if you see it in the file 
# or
read binary "myfile.icb" name={"1crn","7cpu"} 
h4-- Reading selected objects from an icb file
 
Options:
 
* --all save all objects in the shell (system variables are skipped)
* --key= ~~s_password protect the file with a password. To open this file with the password, use the File menu ( Open with password)
From the command line: to open a protected file, use
 read binary [all]  [edit]
* --read --only  : saves a file in a read only mode for other users. 
 Examples:
  
ii = {2 3 4} 
rr = {2. 3.4 5.5} 
g = Grob("CELL",{1. 1. 1.}) 
g2 = g*2. # twice as large 
write binary iarray rarray grob   # the default file is icm.icb 
 Info> 4 icm shell objects icm.icb 
 
list binary   # looks at "icm.icb" 
   1 ii                             iarray                  20 
   2 rr                             rarray                  32 
   3 g                              grob                  1788 
   4 g2                             grob                  1788 
 
delete ii 
read binary name={"ii"} 
  Info> 1 icm shell objects read from icm.icb 
 
write binary grob "aaa" 
  Info> 2 icm shell objects aaa.icb  
See also: list binary, read binary
 
 
 write [ iarray ]  I_name [  s_fileName ]
 
 write [ rarray]  R_name [  s_fileName ]
 
 write [ sarray]  S_name [ s_fileName ]
 
 write [ matrix ]  M_name [  s_fileName ]
 write an array or a matrix to a file. Default file extensions are 
 .iar,  .rar,  .sar, or  .mat, respectively.
 See also: 
 read iarray, 
 read rarray, 
 read sarray, 
 read matrix.
 
 
 
 
 
 
 write molcart [ mol | separator=s_sep [header] ] table=s_dbtable s_filename [ connection_options ]
 
Exports database table s_dbtable in SDF or CSV/TSV file format (with or without header). 
If the format is not specified explicitly, it is guessed from the s_filename extension.
 
The Molcart connection may be specified by  connection_options .
 
See also: molcart, make molcart
 
 
 write [ { column | database  ] } array1 array2 .... [ s_fileName ]
 write arrays in the column or database format to a file.  
Default file extension is  .db
 See also: read database.
 
 
 If you imposed tethers between you current object and another object and you want to  
quit the session and then restore you setup, you can use the following trick:
  
# first let us create an object a_ly6. tethered to template a_x.  
read alignment s_icmhome+"sx" 
read pdb s_icmhome+"x" 
build model ly6 a_x.m   # a new object a_ly6. created and tethered 
# 
write string String( a_//T ) "tTz.str" # tethered model atoms 
write string String( a_//Z ) "xTz.str" # x-template atoms 
write object a_x,ly6. "tx.ob" 
# 
quit 
# 
% icm 
read object "tx.ob" 
read string "tTz.str" name="tTz" 
read string "xTz.str" name="xTz" 
set tether $xTz $tTz exact    # tethers restored 
 
 
 writing ICM table in text format  write  T_table1 [ T_table2 .. ] [header] [ separator=s_delimiter | csv ] [ s_fileName or s_file.xlsx ] [number] [compress]
 write the T_table1,..,  tables to a file in several formats depending on the the s_delimiter and/or the filename extension (e.g. for the excel .xlsx files). 
Output file types:
 
The default is the ICM .tab file. It will have two header lines with table name and field name information, followed by the values. The default extension .tab is appended automatically.  The ICM text table format has a header which 
allows one to read this table back to icm with the read table command 
Microsoft Excel file: if the filename extension is ".xlsx", ICM will save an Excel formatted file, e.g. write t "/tmp/t.xlsx" 
Comma-separated-value or .csv file: if cvs option is used, or separator="," argument is provided, the file will be in the .csv format. This files can be then imported to Excel.
Bar-separated, and other delimiters, e.g. separator="|" argument and .bsv extension results in a .bsv file format.
 
Options:
 
csv      : comma-separated-value
header   : add column names as the first line
separator= s_delimiter  : sets a new delimiter 
compress : for real_number output honors the format set for a column by the set format col command.
 (eg add column t {2.2222,3.333}; write t csv compress "/tmp/t.csv")
 Example:
  
 group table t {1 2 3} "a" {"one","two","three"} "b" 
 t1=t[2:3] 
 write t t1 "tt"   # write both tables in one file 
 write t "tt.xlsx" # write table into an excel file 
 write t csv "tt.csv" # write table into a comma-separated file
 delete table      # read both tables 
Writing on other formats is described below: write binary and write table mol
 writing tables in a binary format
 write binary T_table1 T_table2 ..  s_file
 
 write binary tables  s_file 
 The most compact and fast format is the binary format. 
Any object can be saved to and read from a binary project file with ".icb" 
(ICM-binary) extension.
 See also write database T and write column.
 
 
 | Writing/exporting an sdf/mol file | 
 
 
 write table mol s_sdfFileName [ index ] [compress]
 writes an ICM chemical spreadsheet as a mol/sdf file. 
All the property columns are added as feature records to individual mol-entries. 
Options:
 
index adds sequential order number as an additional property named IX  
(it may be useful as an ID).  
compress skips 9 columns for each atom field, and unused bond fields in the output .sdf file
 Example:
  
read table mol "ex_mol.mol" name="t" unique 
write table mol t 
 
 
writing tables in CSV or TSV formats  write  T_table1 [ header | number ] [ separator= s_delimiter ] [ s_fileName ]
 if the separator or the s_fieldDelimiter variable contain just 
a simple symbol (e.g. comma or tab), ICM will 
write a comma-separated or tab-separated table with the first line containing 
the field names, e.g.
  
 group table t {1 2 3} "a" {"one","two","three"} "b"        
 write t header separator="," "t.csv" 
 unix cat t.csv 
 a,b 
 1,one 
 2,two 
 3,three 
 
 write t separator="," "t.csv"  # without header 
 unix cat t.csv 
 1,one 
 2,two 
 3,three 
Option compress imposes user format for arrays of real values. The format may be assigned to a column by the set format col command. Example:
delete t
add column t 1//2 3.3333//4.44444  # creates 'A' and 'B'
set format t.B "%.1f"
write t separator="," compress "/tmp/t.csv"  # will write 3.3//4.4
 
To read a table in comma-separated format with the headers, use the following commands: 
  
read table separator="," header name="t" "t.csv" 
 
 write column array1 array2 .... [ s_fileName ] [  separator= s_Separators]
 write arrays in a multi- column format to a file.
 Examples:
  
 read column s_icmhome + "res.tab"    # amino acid properties 
 write column aa flexInd  "tm.tab"    # two columns  
If you want to write all the entries of an ICM-table you may do the following. Examples:
  
 read column s_icmhome + "res.tab" # a set of isolated arrays  
 group table RES $s_out  # create an ICM-table RES (s_out : array names) 
 write RES               # write in the 'table' layout 
 write database RES      # write table RES in the 'database' layout 
Default file extension is  .col. See also: 
 read column, 
 show column. 
 read table, 
 show table.
 
 
 write database [ html ] { array1 array2 .... |  table } [  s_fileNameRoot ]
 write several arrays or a table in a database format to a file  
(usually tables are written in a multi  column format). 
This command can also be used to save a subset of arrays of a table in a specific 
order. Option html writes the table with appropriate HTML tags. 
See also 
 read database 
 write table, 
 show database.
 Example:
  
 resnam = {"ala" "glu" "arg"} 
 reschg = { 0., -1., 1.} 
 write database resnam reschg "a" # default extension ".db" will be added 
# 
 group table t resnam reschg  
 write database t.reschg t.resnam "a"  # reverse the order</tt> 
 
 write drestraint [ as ] [  s_fileNameRoot ]
 write distance restraints of the current object to a file.
 See also: drestraints and drestraint types.
 
 
 write drestraint types
 write drestraint types to a file. 
You may define your own types with the set drestraint type 
command or by editing a *.cnt file.
 
 
 write [ factor ]  factor_Name [ s_factorFileNameRoot ]
 writes crystallographic structure factors to a file.
 
 
 
 
 write gamess [charge|energy|cartesian] [memory=i_Mb] [store=i_intsize] [fix=vs] [type="DFT"] [new] as
 
See also:
 
 
 
Commands for exporting graphical objects.
 write grob off g_name [s_fileName]
 
Export in Object File Format (OFF).
This is a simple file format supporting points, faces (triangles), edges (lines),
normals, per-vertex colors. 
The default extension is ".off".
 
 write grob wavefront g_name [s_fileName]
 
Export in Wavefront OBJ/MTL file format. 
Usually the file will be exported in many files. The object 
geometry and structure (points, faces, lines, groups of points) are stored in 
an ".obj" file.
Coloring (material) properties are stored in a separate ".mtl" file.
Material textures are exported in the image format in which they are stored, usually JPEG or PNG.
 write {grob | g_name} [s_fileName] [ append ]
 Write/append to a file. 
If g_name is not specified, all grobs are written. Depending on 
object features, they may be exported in OFF or Wavefront OBJ file formats.
 
See also: write image, write postscript, read grob.
 
 
 write html  T  [format=yes] [frame=1] [chemical=yes]
 writes the T_ table with HTML tags to a file.
 
Arguments and Options: see show html
 
Example:
  
findPubchem "aspirin" no no 100
write html pubchem_hits "pubhchem_hits.html" format = yes header = yes frame = 1 chemical = yes view size = 200 // 150
 See also:
 
 
 write image [png|targa|cmyk|gif|rgb] [display] [print] [postscript [print|preview]] [compress] [stereo] [color|bw] [window=I_xyPixelSizes] [store] [s_fileName]
 
write the current screen image to a file. The default image file format is tif .  
The png-format is the most compact and is recommended for web-publishing.   
The default settings are stored in the IMAGE table.  
Some of them can be overridden by the following options: 
 
 IMAGE.generateAlpha logical variable controls if the alpha channel information is added to the SGI 
 rgb and tif image files. This additional channel describes 
opacity of the image pixels and makes the background transparent. 
Images generated with alpha channel can be nicely superimposed in the 
IRIX showcase since their backgrounds are transparent.
 Examples:
  
 display a_1crn. ribbon 
 write image "a"              # a.tif image - about 1400 kB 
 write image "p" compress     # p.tif image - about 88 kB 
 write image postscript stereo display "aaa.eps" 
 write image 2*View(window)   # hi-res, may screw up labels  
 unix lp -c a.eps             # print if you like the result 
See also: write grob, write png - a different version of the png writer: does not allow arbitrary resolution, but allows transparent background, write postscript. 
 
 
 
 write image image-array [ S_filenames|s_directory_to_save|s_single_file_name ]
 
save images stored in ICM into the specified location.
 
Example:
 
nice "1crn"
# make 3 images with default names and add them to the default album 'album'
make image
make image
make image
write image album[1] "myimage.png"
write image album[1:2] {"img1.png","img2.png"} #specify names to be used
write image album s_tempDir #save all images into the s_tempDir
 
 | write 2D chemical image in .png or .svg format | 
 
 
 write image [chemical|chemArray] [ s_fileName ] [ window = { i_width i_height } ] [ display = s_chemViewString ] [ IMAGE.bondLength2D = r_bondLengthInch ] [transparent] [sstructure=s_smarts] [ IMAGE.lineWidth2D=r_lineWidth ] [ IMAGE.font=s_fontSpec ] 
 
write chemical depiction to a file. File extension defines image type. 
The chemical drawing can be modified with a string of display options (see below) and these two parameters:
You can increase resolution by adjusting IMAGE.bondLength2D and/or the window argument. 
E.g. 
 
write image Chemical("C(c1ccc(cc1)C(c1ccc(C#N)cc1)n1cncn1)#N") "xxx.svg" IMAGE.lineWidth2D = 1.8 IMAGE.font = "28px bold Arial"
If multiple chemicals are provided, separate file will be created for each one.
Use transparent option to generate transparent background.
 
The chemical view options can be adjusted by providing display argument. See set property chemical view for format description. It is basically a string of characters shown below.
 
The display options:Each character in s_chemViewString codes the following chemical view options.
 
"H" : Hetero-atom hydrogens
"T" : Terminal hydrogens
"S" : Atom stereo labels
"X" : Do not show explicit hydrogens
"A" : Aromatic rings"
"C" : Show 'chiral/racemic' flag
"3" : Do not show 3D as 2D
"U" : Unique atom classes
"N" : Atom numbers
"M" : Monochrome atom labels
"W" : Don't show atom text labels. Colors half of the atom's adjustment bond with the element color (Like wire in 3D)
"R" : Don't show atom text labels. Draw color square instead.
 
Examples:
 
write image t.mol[1] IMAGE.lineWidth2D=3 display="HSA" "/tmp/mol1.svg"
write image Chemical("CCO") "ethanol.png" IMAGE.bondLength2D = 0.8 
write image Chemical({"C1CCN(CC1)c1ccccc1", "CCN(C)c1ccccc1" }) display="AR" # aromatic rings + color square instead atom labels
 
 
 write image alig [ s_fileName ] [ i_resIncrease=2 ] delete 
 
write alignment image to a file. File extension defines image type.
 
You can increase resolution by providing integer argument.
 
You can set alignment view property either manually in GUI or using set property alignment command.
 
Example: (export all alignments in high resolution with profile enabled)
 
S_al = Name( alignment )
for i=1,Nof(S_al)
  s_al = S_al[i]
  set property $s_al 2048   # turn on the profile
  write image $s_al Name(s_al) + ".png" 4 delete  # write high-res (x4) png image
endfor
 
 
 
 General text and specialized content (e.g. write index mol) index files.
 
General text parsing write index s_inputFile pattern=s_startPattern [add=s_endPattern] [s_outIndexFile]
 
general indexing of a text file, 
Example in which .sdf files are index as text (compare with write index mol )
 
 write index "/tmp/huge.sdf" pattern="" add="$$$$" # file huge.inx will be saved
# alternatively:  write index mol "/tmp/huge.sdf"  
 
See also: read index, read index table, Sarray index
 
Specialized index files 
 write index [ mol | mol2 | fasta | swiss | mmcif ]  s_inputFile [s_outIndexFile]
 
 write index [ swiss | mol | mol2 | fasta ]  T_dbDescription [s_outIndexFile] 
 calculate and write index for a database file described by the control table T_dbDescription,
or by the s_inputFile in the short form of this command.
 
Output 
the index file
i_out contains the number of entries indexed
 
Simple example:
 
write index mol "/data/nci.sdf" "nci.inx" # creates nci.inx file
show i_out
read index "nci" name="x"  # creates internal index table x
Path(x)  # returns /data/nci/
read table x[1:100] # load first 100 molecules to ICM
 
The T_dbDescription table, optional for mol/sdf and mol2/ml2 files, 
contains information about 
the database file (files) and fields to be indexed. 
It may have the following components in the header: 
  
After the header there is a string array containing the list of fields. To create this table 
either define it in a file or use the group table command. 
All text fields (except data) are hashed for fast searching.DIR - string directory name 
FI  - sarray of database files  
EXT - extension of the database files 
 
The fasta option allows one to index the NCBI non-redundant databases. 
 
See also: 
 makeIndexChemDb macro to do indexing in one step, mol, mol2 . 
 Example:
  
 write index mol "drugs.sdf" # the index file is saved to the current directory 
 read index "drugs"
 write index mol "./drugs.sdf" 
 group table t {"ID","DE","KW","SQ"} "fd" header "/data/swissprot/" \ 
       "DIR" {"sprot"} "FI" ".dat" "EXT"   
               # we created control table t  
 write index swiss t "/data/icm/inx/SWISS.inx"  # make index and save to a file 
 read index "/data/icm/inx/SWISS.inx"           # read index 
 show SWISS[2:5] 
 show SWISS.ID=={"12AH_CLOS4","1431_LYCES","B3AT_CHICK"} output="uniprot3" l_info=no  #saves entry into a variable
 show SWISS.ID=={"12AH_CLOS4","1431_LYCES","B3AT_CHICK"} 
 read sequence SWISS.DE=="DNA-BINDING" 
Example with a Uniprot index file, in which the identified entry is saved into a string variable
 
read index "/data/uniprot/sprot.inx"  #creates sprot index-table 
show sprot.ID == "IL2_HUMAN" output="up_text" l_info=no
write up_text "il2.txt"
 
See also: Path ( T_indexTable ), write-index-mmcif
 
 
 write index sequence s_blastRootFileName
 create a set of blast-formatted binary files for searches with the 
 find database command. The command will use all the sequences 
currently loaded into the ICM-shell and will create the following compact binary files 
(the first three files are the same as those generated by the  setdb  
blast command):
  
The relative solvent areas file is saved only if the sequence was generated
from an object in which the areas had been calculated with the
 show area surface command. If the .psa file is present, 
 ICM will modulate the scores with the accessibilities (it will be 
 more permissive for the accessible residues).name.psq  binary sequences 
name.pin  pointers/index
name.phd  sequence headers 
name.psa  # optional: relative solvent accessibilities for each residue.  
 
If you want to do the opposite (i.e. given the three or four blast files, 
generate one fasta sequence file), use the 
 find database write s_DBpath output= s_fastaFile
 command.
 Simple example (indexing can also be done with the blast setdb routine):
  
# copy to the current directory and edit the icm.cfg file
# make sure that MnSequences is larger than the number of
# sequences in your database
#
 read sequence "fak.seq" # fasta formatted 
 write index sequence "/tmp/db1" 
 delete sequences 
 a=Sequence("MERTDITMKH KLGGGQYGEV YEGVWKKYSL TVAVKTLKED TMEVEEFLKE") 
 find database a "/tmp/db1" 0.001 
 
A more direct way of making the blast files is via the formatdb utility, e.g.
 
formatdb -i /data/blast/dbf/FASTA/pdbaa -n /tmp/p_db
./icm
read sequence swiss web "10KD_VIGUN"
find database fast=10 10KD_VIGUN "/tmp/p_db"
 
See also:
 
 
 write library [ append ] [ auto ] as_entryAtom  [ exit= as_exitAtom] s_libFileRoot
 save a selected molecule, residue or a fragment as an ICM-library entry. 
Use  
 set charge,           
 set bond type and, possibly, 
 build hydrogens before writing an entry. 
We recommend you to do this operation in an interactive session: 
display your molecule and Ctrl-Click the first and last atoms 
if needed. There are two different situations:
   read sequence "aaa.seq"
 
the molecule/residue/fragment does not belong to an ICM-type object. 
For example, you have a pdb-file with a new molecule you would like 
to create an ICM-library entry from. In this case do NOT use option 
 auto and note that the resulting entry will only be a draft, 
since energy parameters of atoms ( atom codes plus related types of  
  van der Waals, 
  hydrogen bondings 
  solvation ), as well as parameters of 
  torsions, 
  bond angles, 
  phase angles, and 
  bond lengths 
will have to be further manually adjusted. Enter the command and 
you will be prompted for the first and the last atoms of the entry. 
The purpose of this procedure is to create a regular ICM-tree, create 
extra bonds if there are cycles and give atoms unique names. 
Some additional editing of the entry may be required to correct 
fixed and free torsions suggested by the program. To declare a certain 
variable free, enter '+' in the appropriate field. 
 
the molecule/residue/fragment belongs to an ICM-type object. 
In this case you may use option auto since all the information 
is there already. The program only needs to extract the molecular subtree 
according to the specified selection. 
 Example:
  
 build string "nter glu cooh" # build glutamic acid residue 
 strip   # convert it to a non-ICM object  
 write library a_def./2/ha "./tm" name ="new" auto  # reroot it
# Now the entry atom is a_//hg2 
 LIBRARY.res = LIBRARY.res // "./tm"
 build string "new" # read the rerooted residue
 display 
 
 
 
 
 write  m_map [  s_fileName ] 
 write specified map to a binary file with specified file.
 write  { map | m_map1  m_map2 ... }
 write all maps or specified maps to corresponding files ( the names 
for the files are generated from map names, the m_ prefix is 
removed from the file names).
 write xplor  m_map ...  [  s_fileName ]
 write the specified map to a Xplor-formatted file.
 Example:
  
 make map potential "ge,gc" Box(a_) 
 m_gc... done 
 Info> Map m_gc created. GridStep=0.50 Dimensions: 16 11 17, Size=2992 
 m_ge... done 
 Info> Map m_ge created. GridStep=0.50 Dimensions: 16 11 17, Size=2992 
 write m_ge m_gc 
 Info> 1 map written to file  ge.map 
 Info> 1 map written to file  gc.map 
 
 
 | write model: update or create the loop database file | 
 write model [ append ] s_lpsFile
 writes a compressed representation of the protein structure to the specified 
loop file ( "def.lps" by default ).  To create a large database, read the 
object list and write a loop over all objects, e.g.
  
# prepare pdbUniq list and .. 
 read sarray "pdbUniq.li"  
 for i=1,Nof(pdbUniq) 
   read object s_xpdbDir+pdbUniq[i]   
# add further filters 
   write model append "icm.lps"  
   delete object 
 endfor 
 To make the program use this file , redefine the LIBRARY.lps file name to, say "./icm.lps"
 
 
 write mol [ exact ]  as_select [ s_fileName ]
 write selected atoms in the mol -file format.  
By default the formal charges (see the set charge command) are saved. 
If the selection contains multiple objects, each object will be treated as
a separate mol entry in an .sdf file. (e.g. write mol a_*.H "tmp.sdf"
Multiple molecules inside each object will be included as parts of one mol entry.
 
Options 
  
 exact: preserve the ICM-atom names (like c1, c2). 
 charge: write the MCHG section containing the atomic real charges. 
 
See also 
 read mol "file.sdf", 
 show mol "file". 
 
 
 write mol2 [ exact ] [ formal ]  as_select  [ s_fileName ]
 write selected atoms in the mol2 -file format (extension .ml2). 
Options:
  
exact  preserves the ICM-atom names (like c1, c2). 
formal writes formal atomic charges instead of the real ones. Adds USER_CHARGES (XXXXXX) tag to the header 
 See also 
 read mol2 "file", 
 show mol2 "file".
 
 
 
 
 write movie s_file [ on [exact] ] [ video_options ]  
 
- create a movie file. Open it for writing. The format is defined by the file extension (e.g. "tmp.mp4"). 
 
Available video_options: 
Some useful related shell variables: size= r_bitsPerSecPerPixel (default = 4.). There is a tradeoff between file size and movie quality. Larger number means high quality and large files.
 frame= i_framesPerSecond (default = 25)
 group= i_gop (default = 100) . GOP stands for 'Groups Of Pictures' that is a group used for compression
 name= s_title . The movie title.
 comment= s_comment set= s_codecflags heavy   - use best video recording quality possible
 
| MOVIE.quality (real) | the default number used for the 'size' parameter |  | MOVIE.qualityAuto (logical) | lets the engine to increase the video quality for movies 
 produced in smaller resolution |  
When the on option is specified this command also starts frame grabbing (see below), 
so that one write movie command may be used instead of two.
 
 write movie on [exact] 
 
- start frame grabbing.
 
Frame grabbing is a video recording mode which allows the user to create movies in 
interactive mode. The 
exact option specifies when the frames are saved
 
Update-based frame grabbing works correctly with time-based ICM features, 
such as rocking/rotation, smooth slide transitions, 
display trajectory, display stack. 
When the frame grabbing is enabled, these commands slow down the graphics updates 
if necessary to provide movie frame grabbing 
at the requested frame rate (e. g. 25 frames per second).no option: frames are saved every 25 msec. This mode allows one to record ICM session activity
in real-time.
with exact option frames are saved every time the view is updated
(the  frame-based timing). This mode is more useful when used in scripts,
as it is possible to control updates (see e. g. display) from an ICM script.
The frame-based timing generates nicer movies when the computer is not fast 
 enough for real-time grabbing.
 
 write movie off 
 
- stop frame grabbing
 
 write movie frame [smooth] [nframes=1] [antialias] [background|transparent=r]
 
- save nframes individual frames
 
smooth is a very powerful option allowing to create blending effects.
It writes nframes to make a smooth transition from the previous frame. 
Each frame is an interpolation between the previous and current frame.
If the option smooth is used when writing the first movie frame,
fade-in effect is created, i. e. the command writes blended frames
transforming empty scene into the current picture.
 
Option background may be used in combination with smooth to create a 
fade-out effect from the last frame to empty background. In general, 
write movie frame background writes an empty scene frame.
 
Option antialias applies full-scene anti-aliasing, which improves the video quality.
In GUI also consider 'high quality' button and shadows (in combination with option exact )
 
Option transparent allows one to create frames which are blended with the background 
 to create fade-in/fade-out effects.
 
 write movie exit  
 
- stop recording and close the file.
 
Example with smooth transition effects:
 
read pdb "1crn"
display
write movie "ForCannes.mov"
display wire
write movie frame 5
display ribbon
write movie frame 45 smooth
for i=1,100
  rotate view Rot({0. 1. 0.} , -1.) 
  write movie frame
endfor
undisplay
write movie frame 50 smooth
write movie exit
Example with still image, fade-in and fade-out effects.
 
read pdb "1ekg"
display a_
color background lightblue
write movie "ItCameFromTheSky.avi"
write movie frame smooth 25 # fade-in (25 frames is one second)
write movie frame 25 antialias # still image
write movie frame smooth  background 25 # fade-out
write movie exit
 
Example featuring rotation and a 
more complicated way of creating fade-in/fade-out effects:
 
read pdb "1ekg"
display a_
write movie "Vertigo.mov"
for i=1,50
  write movie frame transparent=(51-i)/50. # fade-in
endfor
for i=1,100
  rotate view Rot({0. 1. 0.} , -1.) 
  write movie frame # write rotated image
endfor
for i=1,50
  write movie frame transparent=i/50. # fade-out
endfor
write movie exit
 
 write object [ options ] [ as_selection] [  s_fileName [  rename ] ]
 write an ICM molecular object (or many selected ICM-objects) in binary 
 ICM format to a file. A single object can be renamed 
in the file according to the s_fileName, if option rename 
is specified. 
Important: only whole ICM object may be written by this 
command, and file extension will always be  .ob.
 Options (defaults shown in bold):
  
See also: 
 read object, 
 write pdb, 
 OBJECT, 
 strip .append : append to a multiple-object file 
rename : rename the single object to s_fileName (leave out path and extension) . 
short : write a compressed file for non-ICM objects without b-bactors and occupancies.  
strip : write a stripped 
object (i.e. drop information about variables and rigid bodies present in 
an object of the ICM type).  
auto={yes| no} : if  yes the program automatically identifies 
which atom requisites to save. For example, if molecule is displayed, the view  will 
be saved with the object. Properties such as occupancy and charge are considered 
essential if the values are not identical for all the atoms. 
 
If auto=no, the OBJECT table controls the output. 
occupancy={yes|no} : occupancy field 
charge ={ yes|no} : partial atomic charges 
bfactor ={ yes|no} : b-factors 
display ={yes| no} : the current view of your molecular object(s), including graphics planes 
The written display attributes are automatically restored upon reading of the object. 
library={yes|no} : currently not used. 
 Example:
  
 read object s_icmhome+"crn.ob"  
 build string "se ala his" name="AH" # second object named "AH" 
 write object a_2. "alahis" rename   # rename obj. to "alahis" 
 display a_1./1:40 ribbon            # display and save with graphics attributes 
 display a_1./12 cpk 
 display a_2. xstick 
 write object a_*. "twoobj" display=yes # both objects in one file 
 write object a_1. append "twoobj"      # yet another object 
 
 
 write object simple [ as_selection] [  s_fileName ]
 write a compressed object. The information 
preserved in the compressed description of the object is limited to 
3 coordinates and certain atom names (non-protein atom 
names will not be preserved and reduced to just one character) plus 
all residue and molecule requisites. For a PDB-type file,  
a simple object is the most compact for store and fastest to read. 
They are used in the compact fold library.
 
 
 
 
 write object objParray s_file 
 
writes object parray into .ob file.
This file can be read either with read object or read object parray commands.
 
 
 
 
 write pdb [ exact ] [ charge ] [ nosort ][ as_selection] [  s_fileName ]  
 write a molecular (sub)object in PDB  format.  
Normally atoms of each amino acid  are sorted in the following order:
  
ATOM     19  N   GLN O   3      -4.565   0.000  -4.592  1.00 20.00 
ATOM     20  CA  GLN O   3      -4.712   0.000  -6.037  1.00 20.00 
ATOM     21  C   GLN O   3      -6.194   0.000  -6.420  1.00 20.00 
ATOM     22  O   GLN O   3      -7.063   0.000  -5.549  1.00 20.00 
<i>the rest</i> 
Also the n-terminal nitrogen and its hydrogens are assigned to the first 
amino acid. 
Options are the following: 
 
Default file extension is  .pdb. See also: 
 write object, 
 read pdb.
 
 
 
 
 write png [transparent] [ window= I_xyPixelSizes ] [ s_fileName ] 
 
this is a new version of the png writer ( write image png ). This version supports option transparent that makes
the background transparent.
  Options:
 
transparent  sets alpha to max value for all pixels with background color. Without this option the alpha values are set to 0.
window = { Width, Height }  in pixels. If you want to specify just one size and determine the second from the aspect ratio, use zero, e.g. window={0,600} to set height to 600 pixels
s_fileName   self-evident
 
 write postscript [ display ] [ stereo ] [ preview ] [{ color | bw | dash ]} [ i_quality ] [ r_gammaCorrection ] [  s_filename ]
 create vectorized postscript model of the screen image. Instead of the bitmap 
snapshot this command generates lines, solid triangles and text strings corresponding to 
the displayed objects. Since the postscript language is directly interpreted by high-end 
printers, the printed image may be even higher quality than the displayed image.  
The final resolution 
is limited only by the printer since the original image is not pixelized.  
Warning: there may be inevitable side-effects for some types of solid images  
at the intersection lines of solid surfaces (i.e. large scale  cpk representation, 
hint: use display skin instead).
 The default settings are stored in the IMAGE table.  
Some of them can be overridden by the following options and arguments:
  
reverse - makes white background in the saved postscript file.  
display - allows one to view the saved postscript file. The viewer is defined by the s_psViewer variable. 
stereo - generate stereo image even from the mono display.  
Stereo-base is controlled by the IMAGE.stereoBase parameter and is 2.35" (6cm) by default. 
preview - generates postscript preview according to the IMAGE.previewer command string and the 
 IMAGE.previewResolution parameter. 
color or bw  - color or black-and-white options surpass IMAGE.color logical variable.  
dash  - is a great variant of the black-and-white option to generate lines of 
different width and style. The line colors of your screen image are interpreted according to the 
following table: 
 
Examples:gold     - double solid black line 
pink     - triple solid black line 
magenta  - dash1   
orange   - dash2   
brown    - dotted line   
the rest - solid black line 
 
 read object s_icmhome+"crn.ob"
 display a_crn.  # display wire model of crambin  
 color a_//ca,c,n pink         # triple width backbone 
 color a_/arg/!ca,c,n magenta  # dashed lys side chains  
# zoom your picture to fill the whole graphics window 
 write postscript dash stereo display 
i_quality (default=3, possible range: 1:100) - defines a parameter 
in a smoothing procedure. Each side of an elementary triangle is divided into 
i_quality sections and color of all the i_quality2 
smaller triangles is calculated to yield smooth transitions. Optimal value of the 
parameter depends on an image. Only large scale images may require i_quality 
values above 10.  Only in an extreme case of a single triangle on a page with red, 
blue and green vertexes, one may need i_quality of 100. 
 
 r_gammaCorrection allows one to lighten or darken the image by changing 
the gamma parameter. A gamma value that is greater than 1.0 will lighten printed 
picture, while a gamma value that is less that 1.0 will darken it. You may adjust your 
gamma correction parameter for your printer with respect to your display and add 
this setting to the _startup file. 
 Examples:
  
 read object s_icmhome+"crn.ob"
 display a_crn. brown skin   # molecular surface  
                              # Hugh wants to have a look 
 write postscript 1 1. "divine_brown" display 
                              # change parameters for the printer 
 write postscript 5 2. "divine_brown" 
                              # and print it 
 unix lp -c divine_brown.eps     
See also: 
 write image, 
 write grob.
 
 write pov [image] [r_aspectRatio] [s_fileName]
 writes a pov-ray object file which can be processed with the 
pov-ray ray-tracing program.
 Example:
  
 buildpep "ala his trp" 
 display cpk 
 make grob image 
 write pov "x" 
% pov-ray x.pov 
 
 
 
 write { sequence | seq } [ { fasta | swiss | pir | gcg | msf } ] [ s_fileName ]
 write all sequences or the specified sequence seq_ to a file in 
one of specified formats. The default format is the fasta format.
 
 
 write session [ s_fileName ]
 write commands from an ICM session to a file. Default file name is "_session.icm". 
This is a simple text file with icm commands. Feel free to edit the file
 Example:
  
 .. 
 a=1 
 history 10 
 write session 
  Info> 4 history lines written to file  _session.icm  
 See also: history and delete session commands.
 
 
 write stack [ simple ] [ s_fileName ]
 write the current state of the  conformational stack to a file.  
Starting from May, 2003, version ICM3.022, the stack file is compressed by default. 
The stack file is not compressed if the simple option is used. 
Default file extension is  .cnf.
 See also: 
 show stack, 
 delete stack, 
 read stack, 
 read conf.
 
 
 
 
 write system preference [ preferenceName ]
 
saves the persistent user preferences to a operating system specific location ( ~/.config/Molsoft.conf on Unix, plist file on Mac, registry on Windows, see preference system for details ).   Note that only the registed persistent preferences can be saved this way, any other parameters, new or existing need to be changed in a user_startup.icm script or directly in a command or macro.
 
  This command tracks if a preferences has been changed
The command without additional arguments will save ALL CHANGED preferences.
Examples:
 
 write system preference  # save modified preferences
#
 TOOLS.edsDir = "/data/eds/"
 write system preference TOOLS.edsDir  # save only this preference
 
 write [ vs_variables][ s_fileName ]
 write a variable selection vs_ to a file.
 Default file extension is  .var .
 See also: 
 read variable.
 
 
 |