Prev | ICM Language Reference O-R | Next |
[ Object | only | parray | pattern | png | Pdb | peptide bond | pharmacophore | profile | prosite | rarray | Psa | REBEL | real | regularization | residue | rgb | ribbon ]
object, 3D molecular objects |
A pdb file or a chemical molecule with 3D coordinates, or a newly build group of molecules that can co-exist in space are called objects in ICM. Please do not confuse this specific use of the word with general shell objects that include other data types. A session may contain any number of molecular objects.Each object (i.e. molecular object) in turn consists of three levels or organization:
ICM understands expressions specifying different selections in objects, see object selections. There are two main classes of objects:
The non-ICM objects (from the second line on) may have subtypes such as
"ICM" ready for energy calculations. Those objects are either built in ICM or converted to the ICM-type. |
"X-Ray" determined by X-ray diffraction |
"NMR" determined by NMR |
"Model" theoretical model (watch out!) |
"Electron" determined by electron diffraction |
"Fiber" determined by fiber diffraction |
"Fluorescence" determined by fluorescence transfer |
"Neutron" determined by neutron diffraction |
"Ca-trace" upon reading a pdb, ICM determines if an object is just a Ca-trace. |
"Simplified" special object type for protein folding games. |
Each object contains the following information:
Functions on molecular objects. os_ means object selection for other abbreviations see the link.(note that some functions that also operate molecules, residues and atoms are not included).
`Cell ( { os | m_map } )
`Charge ( { os | ms | rs | as } [ formal | mmff ] )
`Date ( os )
`Field( { rs | ms | os } [ i_fieldNumber ] )
`Field( { as | rs | ms | os } [ s_fieldName ] )
`Field ( os i_fieldNumber ) # see also set field os_ i_number
`File ( os )
`Label ( os_objects )
`Mass( as | rs | ms | os )
`MaxHKL( { map | os | [ R_6CellParameters ] }, r_minResolution ) ⇒ I3
`Mol ( { os | rs | as } )
`Name ( s_hint os unique )
`Name ( os )
`Name ( s_root os_1 unique )
`Namex ( os )
`Next ( { as | rs | ms | os } )
`Nof( { os | ms | rs | as | vs } )
`Nof( { os | ms | rs } [ atom ] )
`Parray ( object [os] )
`Res ( { os | ms | rs | as } [ append ] )
`Resolution ( os_object ) ⇒ R_array_of_resolutions
`Select ( as_sourceSelection os_targetObject )
`Select ( os_sourceObject S_residueSelStrings )
`Select ( os_sourceObject I_atomNumbers )
`String( { os | ms | rs | as } [ i_number ] )
`Symgroup ( { s_groupName | os_object | m_map } )
`Symgroup ( { i_groupNumber | os_object | m_map } string )
`Transform( s_group|iGroup|os_1|map ) ⇒ R_12N_all_fract_transformations
`Transform( s_group|iGroup|os_1|map iTrans )⇒ R_12_fract_transformation_i
`Type ( os_object , 2 )
`dsCellBox os_
Commands acting on objects
append stack os_ligandObject
clear graphic [ os_ ]
convert [ exact ] [ charge ] [graphic] [ tether ] [ os_non-ICM-object ] [ s_newObjectName ]
copy [ strip ] [ tether ] os [ s_newObjectName ] [ delete ]
delete { object | os }
find pdb rs_fragment os_objectWhereToSearch s_3D_align_mask [ s_sequencePattern [ s_SecStructPattern ] ] [ r_RMSD_tolerance]
find pattern [ number ] [ mute ] s_sequencePattern [ i_mnHits] [ { os_objectWhereToSearch | seq_Name | s_seqNamePattern } ... ]
find segment ms_source [ os_objectWhereToSearch_2] [ r_maxRMSD ] [ i_minNofAlignedResidues [ i_accuracyParam ] ]
move ms_MoleculesToMove os_destination
move os_ObjectToMove os_destination
rename { os [ full ] | ms | rs | as } s_newName
rotate [ os | ms | g_grob ] M_rotation
set comment [ append ] os_Object s_comment # returned by the `Label() function
set object [ os_newObjName ]
set symmetry os_object R_6cell s_symgroup | i_symgroup [ i_NofChains ]
set type os s_type
set [ atom ] type mmff [ os]
show { os | ms | rs | as | vs }
sort object R|I # reorder objects by arrays, e.g. --{sort object Resolution(a_*.)}
sort object os_ i_pos # move selected OBJECTS to specified position
sort os [ field = i_Field ] # sort MOLECULES in selected objs by field
strip os_object [ virtual ]
superimpose os_static I_atomNumbers1 os_movable I_atomNumbers2
translate { os | ms | g_grob } [ add ] [ symmetry ] R_3translationVector
Important macros working on molecular objects.
convertObject ms l_delete_water l_optimize_hydrogens l_replace_the_original l_display
convert2Dto3D os l_build_hydrogens (yes) l_fixOmegas (yes) l_display (no) l_overwrite (yes)
icmPmfProfile os ( a_ ) l_accessibilityCorrection (yes) l_display ( no )
makeSimpleModel seq ali os
makeSimpleDockObj [ os_object ] [ s_newObjName ]
only |
display only g_icos # undisplay everything which is in the # graphics window (if any) # and display icosahedron
parray |
[ Object parray | Sequence parray | Image parray ]
pointer array, abbreviated as P. An array of pointers to objects. Currently there are several types of parrays, that consist of the following data types:read table mol "Maybridge.sdf"You can also use the Chemical function.
Molecular objects in arrays and tables |
ICM molecular objects (both converted and unconverted) can be grouped into arrays and shown in tables.
See the following functions:
Array of sequences |
ICM sequences may be grouped into arrays and placed into tables. Some functions supporting sequence arrays:
Array of images |
ICM provides multiple ways of generating images and performing advanced operations with them: See
pattern |
png |
[ pattern-matching ]
graphics image format. Stands for Portable Network Graphics and was designed to replace the GIF format and, to some extent, the much more complex TIFF format. While GIF allows for only 256 palette colors, PNG can handle a variety of color schemes like TIF (1,3,8, 24, etc. bit colors). Furthermore, PNG is free, while GIF is subject to licensing fees. PNG also supports alpha-channel. Since 1998 most browsers correctly display PNG images.To write a png with transparent background use write png transparent
pdb or Protein Data Bank |
ATOM 52 N HIS D 18 53.555 24.250 49.573 1.00 32.59
peptide bond |
pharmacophore |
Pharmacophores in ICM are special objects of the non-ICM type. A pharmacophore can combine special ph4 centers and disconnected chemical fragments.
The ph4 centers have the following atom types and names:
Creating a pharmacophoreA pharmacophore can be created from an object with the makePharma macro,
macro makePharma ms s_name ("pharm") l_points (yes) l_display
The l_points logical defines if the pharmacophoric centers or fragments are created from the source molecule.
The new object gets type pharmacophore (see the set type os "pharmacophore" command ).
Note the following issues:
set bfactor a_pharma.p5/5/Qv10 0.8
set type a_pharma.//Qa3 316 rename a_pharma.//Qa3 "Qd4"
The following commands and functions work with pharmacophores:
Saving ph4 objects.
The objects can be saved with the regular write object command or write binary commands.
profile |
make sequence 10; align sequence; prf=Profile(aln); t = Table(Matrix(prf)) # columns names 'A','B','C',... add column t Count(Nof(t)) Split(String(Sequence(prf)),"") name={"ipos","seq"} # adds number and cons seqSee also: Sequence() Consensus() Matrix() Align().
prosite |
CC ************************************************************************* CC CC This file may be copied and redistributed freely, without advance CC permission. You are allowed to reformat it for use with a software CC package, but you should not modify its content without permission CC from the author). CC CC *************************************************************************.
If you want to use a newer version of prosite and your organization is non-profit or has a license from SIB, you can download prosite.dat from, e.g.:
unix wget ftp://us.expasy.org/databases/prosite/release_with_updates/prosite.dat read prosite "./prosite.dat" # read the newer version in readUniprot "IL2_HUMAN" find prosite IL2_HUMAN
rarray |
ICM class for arrays of real numbers: { -1.6 , 2.150 3., -160.} An array can be formed dynamically from simple reals with the double slash (concatenate) operator, e.g. 1.3//-1.//dielConst//14.
See also: Rarray , Toreal , read rarray
Predicting Polar Surface Area |
Polar surface area or PSA is a parameter important for predicting transport properties of drugs. It correlates with intestinal absorption and blood brain barrier penetration. (e.g. see Polar Surface Area by Peter Ertl in Molecular drug properties: measurement and prediction, Raimund Mannhold, Ed, Wiley-VCH, v 37, 2008 )
Single conformation 3D PSAPSA is calculated as the exposed van der Waals surface of oxygens and nitrogens as well as the hydrogen atoms attached to them. For a converted and current ICM object PSA can be calculated with the following command:
show surface area a_//n*,o* | ( a_//h* & Next( a_//n*,o* bond )) a_ mute vwExpand = 0. PSA = r_out # the previous command returns the value in r_out
The conversion is needed only to make sure that all hydrogens are in place. If they are, the conversion is not really needed and the same command can be applied.
Multiple conformation 3D PSAThis measure obviously depends on the conformation of the molecule. An average PSA can be calculated with the following script from a stack on conformers generated by a montecarlo command, e.g.:
for iconf=1,Nof(conf) load conf iconf show surface area a_//n*,o* | ( a_//h* & Next( a_//n*,o* bond )) a_ mute vwExpand = 0. avPSA += r_out endfor avPSA /= Nof(conf)This script can also be easily modified to include Boltzmann weights of individual conformer contributions. A similar look can be written to process the results of the _confGen script.
Fast and accurate estimate of PSA from chemical topology only ( TPSA or MolPSA )
Ertl et al. (see the reference above) proposed a way to estimate the PSA value directly from a two dimensional topology of a molecule without a need to convert it to 3D and sample its geometrical states. The ICM MolPSA function uses a similar method to estimate PSA, ( e.g. Predict( Chemical("CCO"),"MolPSA" ) ). The following method was used to derive a model (see the learn command ):
read table mol s_icmhome+"/moledit/Dictionary.sdf" name="t" add column t Predict(t.mol "MolPSA" ) name="MolPSA" show Mean(t.MolPSA)
REBEL |
a method to solve the Poisson equation for a molecule. REBEL is a new powerful implementation of the boundary element method with analytical molecular surface as dielectric boundary. This method is fast (takes seconds for a protein) and accurate. REBEL stands for Rapid Exact-Boundary ELectrostatics. The energy calculated by this method consists of the Coulomb energy and the solvation energy which is returned in the r_out system variable. |
![]() |
The polarization charges, or induced surface charges, can be returned by the Rarray( as_ ) function after the equation is solved, e.g.:
electroMethod = 4 show energy "el" Rarray( a_//* ) # returns polarization charges
Electrostatic troubleshooting
Problem: the electrostatic surface looks different before and after conversion to ICM .
Explanation: The unconverted PDB object has (i) an incomplete set of atoms ( lacking hydrogens for the X-ray entries, occasional missing side chains or loops, etc.); (ii) has formal charge ambiguities for his (hip), asp (ash) etc. , see below (iii) has no charges, i.e. the formal and partial charges are not assigned;
The dsRebel procedure (i) builds a full atomic model with hydrogens, (ii) resolves at least some residue charge ambiguities, and (iii) assigns to the atoms of the unconverted objects a simplified set of formal charges. See convertObject for further details.
The difference between the formal charges of the unconverted and the full distributed partial charges after conversion creates a small difference in electrostatic pattern.
If the conversion procedure charges a residue (e.g. a cysteine next to a metal ion), then the electrostatic patterns will differ much more in the vicinity of that residue.
Problem: the electrostatic surface looks different for different PDBs of the same protein
Explanation 1: Some residues can be charged or uncharged. In a specific PDB can be marked by a different 3-letter residue name or not. For example:
Amino Acid | Frequent | Rare |
---|---|---|
aspartate | asp (-) | ash (0) |
cysteine | cys (0) | cym (-) |
glutamate | glu (-) | glh (0) |
histidine | his (0) | hip (+) |
lysine | lys (+) | lyn (0) |
tyrosine | tyr (0) | tym (-) |
Problem: the numerical singularities are reported Sometimes numerical instabilities inherent to the REBEL calculation lead to singularities and strange values of electrostatic potential. This can be detected by looking at the polarization charge values. The ePotProtected macro in the _rebel file contains the code that checks for this type of instabilities.
real |
Reals may be mentioned in
arithmetic expressions,
commands and
functions.
Examples:
a = -1.2 b = Abs(Sin( 2.3 * a - 3.0 / a))
regularization |
residue |
rgb |
ribbon |
a graphical representation of a polypeptide chain backbone by a smooth
solid ribbon. DNA and RNA can be also displayed in a ribbon style.
There are three types of elements of the ribbon display depending on the secondary structure assigned to a given residue. |
![]() |
If the polypeptide chain has a break (missing residues) the ribbon
shows bullets or nothing depending on the GRAPHICS.chainBreakStyle .
The DNA/RNA ribbons consists of two parts the backbone ribbon
and the bases shown with the sticks and balls. To selectively
display and undisplay the bases, you can do the following:
Example:
read pdb "1dnk" # contains 2 dna mol. display ribbon a_1.2,3 # both bases and backbone undisplay ribbon base a_1.2 # bases disappear display ribbon base only a_1.2 # only bases display ribbon a_1.2,3 yellow # both bases and backbone color ribbon a_1.3 magenta # the second chain backbone color ribbon a_1.2,3 bases # default by base type cool a_ # cool is a rich macro. View the whole thingSee also:
Prev mute | Home Up | Next S |