ICM Manual v.3.8
by Ruben Abagyan,Eugene Raush and Max Totrov
Copyright © 2019, Molsoft LLC
Jun 9 2022

Reference Guide
Command Line User's Guide
  alpha helix
PrevICM Language Reference

[ alignment | all | alpha helix | amber | append | array | atom | axis ]


[ Alignment gap format ]

or sequence group. Individual sequences in the group may be just combined and left-justified (no insertions/deletions, e.g. as an output of group command) or actually aligned (or realigned) with either pairwise function Align ( seq1, seq2 ) or multiple alignment command align sequence_group
Pairwise sequence alignment is performed with the ZEGA (Zero End-Gap Alignment) algorithm. You can read, write, list, show, delete or edit an alignment. Flag l_showSstructure allows you to show the secondary structure string which belong to a participating sequence to be displayed. When you show the alignment, the consensus string appears on top. The meaning of consensus characters is explained below and the string can be extracted with the Consensus( ) function.
A table with relative amino acid numbers for all sequences in the alignment is returned by the Table( ali_ ) function. An array of mean scores for each column of a multiple sequence alignments is returned by the Rarray( ali [ exact ] ) function.
Coloring 3D models by local alignment strength. Space averaging
See: selectSphereRadius and ribbonColorStyle = "reliability"
  • extracting a domain (i.e. a certain position range) from an alignment alignment[i1:i2] or alignment[i] or alignment[ I_pos ]
  • extracting an alignment of a group of sequences from a larget alignment Align(aliLarge, I_seqNumbers )
  • projected alignment: concatenation of two alignments sharing the same sequence. The shared sequence serves as a ruler for merging the two alignments. The alignments can be of arbitrary size and number of sequences. In the simplest case of three sequences a, b, c and alignments ab and bc, the operation ab//bc will create an alignment of three sequences a b c. The function Align(ab//bc,{1,3}) will extract the, so called, projected alignment of a and c through b. Example:
      ali1    //    ali2  returns   Projected ali. 
    a VYRWA-W     b FK-WG--KW     a  VYR-WA---W 
    b -FKWGKW     c AKGWAPGKW     b  -FK-WG--KW 
                                  c  -AKGWAPGKW 
  • projecting a numerical property from a sequence to alignment: r property transfer via alignment {Rarray}( R_property,seq_,ali_,r_gapDefault ).
  • projecting a numerical property from alignment to a sequence : map aa property to sequence {Rarray}( R_ali,ali_from,seq_|i_seqNumber )

Deleting some sequences from an alignment To delete a list of sequences from an alignment use the following command: delete alignmentName only seq1 seq2 ...
To delete sequences selected via the graphics user interface from an alignment use the delete alignmentName only selection command.
  delete sh3 only Fyn 
  delete sh3 only selection 

Alignment functions and macros:
  • Align( seq1n seq2m [ M_nxmPosScores | area ] ) = ali2
  • Align( seq3D1 seq3D2 [ distance | superimpose ] ) = ali3D
  • Align( [selection] ) = ali2 ; first two (selected) sequences
  • Align( ali seq1 seq2 ) = ali2 ; sub-alignment of seq1 vs seq2
  • Align( ali I_seqNumbers ) = sub-alignment
  • Consensus ( ali [ i_seq| seq ] ) # direct or projected-to-a-sequence consensus string
  • Distance( ali [0| 1| exact] )
  • Distance( ali1 ali2 [exact] )
  • Index( ali [selection| seq ] )
  • Index( ali as_ ) = Iarray ; columns indexes
  • Matrix( ali [number] )
  • Matrix( ali R_26aa_properties )
  • Min( ali seq ) # index of the nearest sequence to seq
  • Name( ali [alignment] ) # returns names of sequences in alignment [or alignment itself]
  • Name( ali seq ) # returns the name of the closest sequence in alignment
  • Namex( ali ) # returns the comment
  • Nof ( ali ) # number of sequences in it
  • Pattern( ali [exact] ) # converts consensus into a pattern like "A?\{2:4\}C"
  • Probability( ali2 .. ) # significance
  • Profile( ali .. ) # makes profile
  • Rarray( ali exact | simple ) # conservation values
  • Rarray( R_l ali_l seq_li|i ) # projects real array of length l to a sequence of li, also opposite
  • Res( ali seq ) # 3d residues in alignment
  • Score( ali [identity|similarity|comp_matrix..] ) # alignment score
  • Select( rs ali ) # propagate selection to other objects by alignment
  • Sequence( ali ) # returns a 'consensus' chimeric sequence
  • Smooth ( ali i_gapExpand ) # expand around gaps
  • String ( ali [tree] ) # alignment as text, or Newick tree.
  • Table( ali [I_alipos] [number| residue| label] ) # makes a spreadsheet/ICM table
  • calcPairSeqIdsFromAli ali l_mode # macro returning pairwise sequence identities from alignment
 read alignment "globins.msf" 
 list alignments 
 glob_fragment = globins[10:36] 
 show glob_fragment 
 delete alignments 

How to extract a sub-alignment?If you have a large alignment and you want to select a sub-alignment without realigning, use the Align( ali I_indexes ) function. The indexes in term can be returned by the Index( S_name .. ) function if you know the name pattern of interest. Example in which we create an alignment aln and then extract a sub-alignment with a,b,e :

 make sequence 10 20  # makes rangomd sequences and names them a,b,c,..
 align sequence       # creates alignment aln
# preparations finished
 show Index( Name(aln) "[abe]" regexp all)  # indexes of sequences with names matching the expression
 aln_abe = Align(aln, Index( Name(aln) "[abe]" regexp all))

Displaying hidden alignment blocks in GUI.

GUI allows one to define how a hidden block is displayed. Two parameters can be specified directly from the Tools Panel in the alignment window:

  1. the "Hidden Block Format can use the following special symbols:
    • %l number of hidden chars
    • %L length of the hidden block
    • %f hidden from
    • %t hidden to
    e.g. " %f .. %t " or " %L "
  2. the "Hidden block width" which defines the total length of the hidden section.


an option used in several commands where whole list of items involved should be invoked (e.g. show terms).

alpha helix

alpha-helical conformation. Average angles (phi=-63.2,psi=-38.5). Referred to as 'a' in variable restraint names: e.g. alpha-zone for histidine is called "ha".
See also commands assign sstructure , set vrestraint and file icm.rst


a force field for simulations of proteins and DNA in the Cartesian coordinate space.
See the reference.


used as option mostly in read and write commands, for example:
 write matrix "fil.mat" append 
 read stack "mc12" append 

arrays. ICM-shell allows 4 types of arrays:
  • iarray - integer array,
  • rarray - real array,
  • sarray - string array
  • parray - pointer array of binary objects (e.g. chemicals, slides, etc.)
These arrays are legal elements of the ICM-shell.
iarray-constant looks like this: {2, 4, 67, -4}.
rarray-constant looks like this: {2.0, -4., .67, -4.3433}.
sarray-constant looks like this: {"a-word","b-word","c-word","..."} .

parray-constants do not exist, a parray can be created in ICM or read from a file.
Commas are optional unless you have negative elements in integer or real arrays. Array ICM-shell variables can be created by direct assignment: (e.g. a={2, 4, 67, -4} or b={"wow","oops","ouch"} ), read (e.g. read iarray "numb.iar" ), and written to a file (e.g. write numb "numb" ). You can specify a subset of an integer array (e.g. a[2:15]). Besides, there all kinds of operations and functions on the ICM arrays. There are many ways to create an array:

  • read an array from a file: read rarray "a.dat"
  • create by direct assignment: a={1, -2, 3, 14}
  • use arithmetic expressions: a=Sin(Cos(a))*b
  • use functions Iarray, Rarray, or Sarray, e.g.: a=Rarray(15, 2.)
  • concatenate two elements, e.g.: a=2//3


Arrays ( array ) may appear in ICM shell as a result of the read xml command. The following functions can be applied to arrays to convert them to a specific type

Index access to specific arrays (e.g. a={1,2,3,4,5,6} ):

  • by number, e.g. a[1], a[3], a[$] (dollar for the last member)
  • by range, e.g. a[2:4], a[4:$]
  • by integer array, e.g. a[{1,4,6}], or a[3//4//$]


(Greek): indivisible; the smallest particle of a chemical element that can exist alone or in combination.

ICM functions related to atoms:


an imaginary straight line passing through a point or a body.

Here is a recipe on how to create an object with carbons as Z-axis sampling points every Angstrom:

n = 30; z_shift = 15.
build smiles String("C",n)
strip a_ virtual
delete a_//h*
mxyz = Matrix(n,3) # x,y,z matrix initiallized 
for i=1,n
  mxyz[i,3]=z_shift + i - 1.
set a_// mxyz  # assign coordinates


Copyright© 1989-2019, Molsoft,LLC - All Rights Reserved. Copyright© 1989-2019, Molsoft,LLC - All Rights Reserved. This document contains proprietary and confidential information of Molsoft, LLC. The content of this document may not be disclosed to third parties, copied or duplicated in any form, in whole or in part, without the prior written permission from Molsoft, LLC.