1.Installation

IChem ships as a single self-contained 64-bit Linux executable. There is no build step and nothing to compile — unpack it, point one environment variable at the data folder, and it runs.

What you need

ItemPurpose
IChem The executable itself. A 64-bit Linux binary, dynamically linked against the standard C/C++ runtime.
lib/ The data folder. Holds the HET dictionary, the pharmacophore rule tables and ~22 000 ligand templates that several modules read at run time.
dataset/ Optional. The input files used throughout these tutorials, so you can reproduce every command on this page.

Both the executable and the data folder are on the Download page.

Platform The prebuilt executable targets x86-64 Linux and needs glibc 2.34 or newer — RHEL 9, Debian 12, Ubuntu 22.04 and later. On anything older, build from source: the repository builds with CMake and also carries the data folder and the regression tests.

Unpack

Pick a root directory for the installation and put the executable and the data folder side by side in it.


# the directory that will hold your IChem installation
mkdir -p ~/IChem && cd ~/IChem

# the executable, made runnable
chmod +x IChem

# the library folder, which unpacks to ./lib
tar xzf IChem_lib.tar.gz

# the dataset folder, which unpacks to ./dataset/test
tar xzf IChem_dataset.tar.gz

# remove downladed archives
rm *.tar.gz

# list available files
ls
dataset  IChem  lib

Environment variables

ICHEM_LIB is the one variable IChem cannot run without. It must point at the data folder — the directory that contains datas/, not datas/ itself.

bash / zsh
export ICHEM_DIR="$HOME/IChem"
export ICHEM_LIB="$ICHEM_DIR/lib"
export PATH="$ICHEM_DIR:$PATH"
csh / tcsh
setenv ICHEM_DIR $HOME/IChem
setenv ICHEM_LIB $ICHEM_DIR/lib
setenv PATH "${ICHEM_DIR}:${PATH}"

Add these lines to your shell start-up file (~/.bashrc, ~/.zshrc, ~/.cshrc) so they survive a new session.

VariableRequiredMeaning
ICHEM_LIB Yes Absolute path to the data folder. IChem reads $ICHEM_LIB/datas/ from it.
ICHEM_DIR Recommended The installation root. The other variables build on it, and every tutorial on this page starts by cd-ing relative to it, so set it if you intend to follow them.
PATH No Lets you type IChem instead of the full path to the executable.
If ICHEM_LIB is unset Modules that need the dictionary fail with No ICHEM_LIB DEFINED. It surfaces at the residue-typing step, so pdbconv aborts partway through with an empty output directory rather than failing immediately.

Check the installation

Running IChem with no arguments prints its version, build date, and the usage block for every module.

IChem | head -3
IChem Version : 5.3.9
Date : 2026-09-16

Then confirm the data folder is reachable. AtomProps is the lightest module to test with — it reads a MOL2 file and reports what IChem makes of each atom.

cd "$ICHEM_DIR/dataset/test/IFP"
IChem AtomProps ligand.mol2 | head -8
Molecule 1 with name REF from file: ligand.mol2

ATOM 	O17  |1    |CAU   0-XX
	 type : O.3
	 props : Acceptor
	 charge: 0

ATOM 	C16  |2    |CAU   0-XX

2.Quick start

Two commands take you from a raw PDB entry to an interaction fingerprint: pdbconv prepares the structure, then IFP reads the interactions off it. Everything else in IChem builds on this pattern.

Step 1 — prepare the structure

pdbconv parses a PDB file, works out which HET groups are genuine ligands, splits protein from ligand from solvent, assigns MOL2 atom types, and carves out the binding site. Here it runs on 2RH1, the β2-adrenergic receptor bound to carazolol.

cd "$ICHEM_DIR/dataset/test/PDBCONV"
IChem pdbconv 2RH1.pdb . 2rh1

The interesting part of the output is the ligand it selected and the cavity it found around it:

2rh1|SELLIG|HEADER	BSA	BFactor	MW	NATM	HETNAME
2rh1|SELLIG|VALUES	70.0928	73.1012	298.38	22	2rh1_1_CAU
2rh1|SELLIG|CAVITY	Size	NPts	Volume	CA	CZ	O	OG	OD1	N	NZ	DU	Drugg	LigRecov	CavRecov
2rh1|SELLIG|VALUES	FULL	291	982.125	69	72	13	30	8	47	33	19	0.923598	95.4545	16.8385
2rh1|SELLIG|VALUES	ALL	237	799.875	54	66	11	21	0	41	28	16	0.888305	95.4545	20.6751

Carazolol (HET code CAU, 22 atoms, MW 298.38) was picked as the ligand, and the cavity around it scores 0.89 for druggability. The run writes:

FileContents
2rh1_1_CAU.mol2The ligand, typed and protonated
2rh1_1_CAU_PROT.mol2The whole protein
2rh1_1_CAU_SITE.mol2Just the residues lining the binding site
2rh1_1_CAU_CAVITY_N1_*.mol2The cavity, at five buriedness cut-offs
_descriptor.txtCavity descriptors in tabular form
pdbconv requirements pdbconv need the HET code(s) of the ligand(s) to be defined in $ICHEM_LIB/datas/HETLIST under the following format:
00N     1       /       514.64  LIGAND
1st columnHET code
2nd column1
3rd column/
4th columnMolecular weight
5th columnMolecule type
Moreover 3D MOL2 file named XXX.mol2 (XXX = your new HET code) should be defined in $ICHEM_LIB/datas/HETLIST/templates.

Step 2 — read the interactions

Feed the binding site and the ligand straight back into IFP. The last line of the output is the fingerprint.

IChem --all IFP 2rh1_1_CAU_SITE.mol2 2rh1_1_CAU.mol2 | tail -2
|A      M82|A      V86|A     W109|A     T110|A     D113| ... |A     N312|A     Y316
0000000000000000000000100000000001000000000000000010000101 ... 00010000000000

Twenty-seven binding-site residues, eleven bits each. The header names the residues; the bit string underneath says which interactions each one makes. That string is the object the rest of IChem compares, clusters and screens on.

Where to go next IFP unpacks what those bits mean. VolSite finds cavities when you have no ligand to point at. GRIM compares two complexes that share no sequence.

3.Tutorials

One worked example per module, in the order you would meet them. Every command below was run against the files in dataset/test/ with IChem 5.3.8, and the output shown is the output it produced. Each tutorial opens with a cd anchored at $ICHEM_DIR, so you can work straight down the page — or start at any tutorial — without worrying about where the previous one left you.

Module 1

Realign — superpose molecules

realign computes the rotation and translation that puts one molecule onto another, then applies that same transformation to any number of other files. The usual reason to want this: GRIM has matched two complexes and told you how their interaction patterns correspond, and you now want the actual protein and ligand moved into that frame so you can look at them together.

Run it

The reference (GRIM_ints.mol2) and the mobile file (4amj_INTS_M.mol2) are interaction pseudoatom files. The transformation that superposes them is then applied to the 4AMJ ligand and protein.

cd "$ICHEM_DIR/dataset/test/REALIGN"
IChem --wMob realign GRIM_ints.mol2 4amj_INTS_M.mol2 4amj_lig.mol2 4amj_prot.mol2

What you get

realign is quiet on success. Each input gets a rot_ copy in the reference frame:

ls rot_*
rot_4amj_INTS_M.mol2  rot_4amj_lig.mol2  rot_4amj_prot.mol2

These three files are byte-identical to the stored reference outputs in REALIGN/output/, which is a useful way to confirm your installation is sound.

Options worth knowing

OptionEffect
--wMobAlso write the aligned copy of the mobile molecule itself
-gmatch MOL2Match atoms by MOL2 type rather than one-by-one. Also accepts NAME, ATMN, and CALP for Cα-only protein fits
-i '2-3|1-6'Pin specific atom pairs by index
Mismatched atom counts With no matching option, realign pairs atoms strictly in file order and stops with Mobile and Fixed have different size if the counts differ. Use -gmatch or -i whenever the two molecules are not the same molecule.
Module 2

IFP — interaction fingerprints

IFP turns a protein–ligand complex into a bit string laid out residue by residue: eleven bits per binding-site residue, one per interaction type. Because the layout follows the binding site, two fingerprints are only comparable when they come from the same site — which is exactly what you want when scoring docking poses.

Fingerprint one complex

cd "$ICHEM_DIR/dataset/test/IFP"
IChem --all IFP site.mol2 ligand.mol2

First the interaction table, one row per contact detected:

HBond_PROT        	|ND2  |421  |ASN 312-A	|O17  |1    |CAU   0-XX	|0	|2.76961	|159.236
HBond_LIG         	|OD1  |78   |ASP 113-A	|O17  |1    |CAU   0-XX	|1	|2.60795	|134.667
Hydrophobic       	|CZ   |349  |PHE 289-A	|C16  |2    |CAU   0-XX	|3	|3.74597	|/
Ionic_LIG         	|OD1  |78   |ASP 113-A	|N19  |4    |CAU   0-XX	|4	|3.60381	|/
Ionic_LIG         	|OD2  |79   |ASP 113-A	|N19  |4    |CAU   0-XX	|5	|2.94042	|/
Hydrophobic       	|CZ3  |46   |TRP 109-A	|C21  |6    |CAU   0-XX	|6	|4.43435	|/

In the first section, all intermolecular interactions between active site and ligand are tabulated.

ColumnDescription
1Interaction type
2Protein atom name
3Protein atom number
4Protein residue name, residue number, chain identifier
5Ligand atom name
6Ligand atom number
7Ligand residue identifier
8Interaction identifier
9Interatomic distance in Å
10Interaction angle in deg. (H-bond and π-stacking only)

Then the fingerprint itself:

|A      M82|A      V86|A     W109|A     T110|A     D113| ... |A     N312|A     Y316
000000000000000000000010000000000100000000000000101000010 ... 00010000000000

In the second section, the interaction fingerprint is displayed with 11 bits/residue in normal (basic) mode. The first line describes the chain identifier and residue number. The second line is the bit string (1: interaction, 0: no interaction). The order is the following:

BitInteraction
1Hydrophobic
2Aromatic (face-to-face)
3Aromatic (edge-to-face)
4H-bond (protein donor)
5H-bond (ligand donor)
6Ionic (protein positively charged)
7Ionic (ligand positively charged)
8π-cation
9Metal
10Weak H-bond (protein donor)
11Weak H-bond (ligand donor)

Score docking poses against a reference

Give IFP a third file and it fingerprints the poses, then reports the Tanimoto similarity of each to the reference ligand's fingerprint.

IChem --all IFP site.mol2 docked.mol2 ligand.mol2 | tail -1
DOCKED	REF	0.7

This docked pose reproduces 70 % of the crystallographic interaction pattern — the kind of number you rank a docking run on.

Choosing a bit format

FlagBits / residueOn-switchable bits
--all11bits 1–11
--basic11bits 1–7
--picat11bit 8
--metal11bit 9
--weakh11bits 10–11
--old7bits 1–7 (legacy format, for comparison with older versions)
A mode flag is mandatory Since 5.3.7 IChem refuses to guess. Running IChem IFP site.mol2 ligand.mol2 with no mode flag exits with You must specify one of --all, --basic, --weakh, --picat, --metal or --old. Older scripts and the v5.2.9 user guide both omit it and need updating.

Options are all adjustable and listed in the IChem full menu page.

Module 3

INTS — interactions as pseudoatoms

ints detects the same contacts as IFP but stores each one as a pseudoatom in a MOL2 file rather than as a bit. Because a pseudoatom has coordinates instead of a residue slot, the result no longer depends on the binding site — you can compare interaction patterns across unrelated proteins. This is the representation GRIM consumes.

Generate the pseudoatoms

cd "$ICHEM_DIR/dataset/test/TIFP"
IChem -logf 2rh1_ints.txt -type CENT ints site.mol2 ligand.mol2
CENT

Two files come out:

FileContents
2rh1_site_INTS_C.mol228 interaction pseudoatoms with 3D coordinates
2rh1_ints.txtThe readable interaction table, same format as IFP

For this complex the 28 pseudoatoms break down as 22 hydrophobic contacts, 3 hydrogen bonds, 2 ionic bonds and 1 edge-to-face aromatic interaction. Each carries a residue name encoding its type — SEC, ALC, ASC, GLC, PHC:

      1 N         -33.9740   10.7140    9.4395 N.am      1 SEC1        0.0000
      2 O         -33.9650   11.1100    6.9705 O.2       2 ALC2        0.0000
      4 OD1       -34.0775    9.7565    6.6855 O.co2     3 ASC4        0.0000
      6 CA        -31.2970    9.5295    9.4820 C.3       4 GLC5        0.0000

Atomic description of the interaction pseudoatoms (MOL2 file):

Atom nameDescribed interaction
CAHydrophobic
CZAromatic
OH-bond (protein atom is acceptor)
OGH-bond (protein atom is both acceptor and donor)
NH-bond (protein atom is donor)
OD1Ionic (protein atom is negatively charged)
NZIonic (protein atom is positively charged)
ZNMetal coordiantion

Where the pseudoatom sits

-type decides the geometry, and the suffix on the output filename follows it:

ModePositionSuffix
PROTOn the interacting protein atom_INTS_P
LIGOn the interacting ligand atom_INTS_L
CENTMidway between the two (default)_INTS_C
MERGAll three at once_INTS_M

MERG is what GRIM wants, since matching on protein-side, ligand-side and central points together is far more discriminating.

Triplet fingerprints (TIFPs)

Adding -fgps encodes every triplet of pseudoatoms as a fixed-length integer vector — alignment-free, and comparable across any two complexes.

IChem -fgps STD ints site.mol2 ligand.mol2 2rh1_full.fgp
# SAVING FINGERPRINT

IChem --small -fgps STD ints site.mol2 ligand.mol2 2rh1_small.fgp
# SAVING FINGERPRINT

Each line is the source name, a tab, then the vector: 12 509 integers at full length, or 210 with --small. Formats are STD (plain), SVM (sparse index:value) and CMP (compressed) — for long sparse vectors SVM is much the smaller. Point repeated runs at the same output file and the fingerprints accumulate, one row per complex, ready for sims.

Triangle inequality rule The Triangle Inequality Theorem states that the sum of the lengths of any two sides of a triangle must always be greater than the length of the third side. If any combination fails this test, the side lengths cannot form a real triangle and the following message is outputted TRIANGULAR INEGALITY NOT VERIFIED !!.
Module 4

GRIM — graph matching of interaction patterns

GRIM is a tool to match protein‐ligand complexes using a graph matching algorithm focusing on protein‐ligand interaction pseudoatoms. It thereby enables an interaction‐based alignment of different protein‐ligand complexes that can be quantified by an empirical scoring function (GrScore) and used to post‐process docking poses by similarity to known protein‐ligand interaction patterns. In a recent international contest (D3R Docking Challenge 2015), GRIM was ranked 2nd out of 44 scoring functions to predict the binding mode of 36 inhibitors prior to the release of protein‐bound X‐ray coordinates.

Compare two complexes

2RH1 (β2-adrenergic receptor) against 4AMJ (β1-adrenergic receptor). GRIM computes the interactions itself when given four MOL2 files.

cd "$ICHEM_DIR/dataset/test/GRIM"
IChem -sim 1 -rn 2rh1 -cn 4amj -score STD grim \
      2rh1_prot.mol2 2rh1_lig.mol2 4amj_prot.mol2 4amj_lig.mol2

7 files are outputted:

CompInts.mol2Interaction pseudoatoms (merged mode) of the complex to fit
Grifp_res.csvSummary of the GRIM alignment
GRIM_ints.mol2Aligned interaction pseudoatoms of the complex to fit
GRIM.logOutput of the GRIM alignment
GRIM_lig.mol2Coordinates of the fitted ligand, aligned to the reference
GRIM_prot.mol2Coordinates of the fitted protein, aligned to the reference
RefInts.mol2Interaction pseudoatoms (merged mode) of the reference complex
cat Grifp_res.csv
NCli	Ref	Comp	Simil	LIG	CENTER	PROT	SumCl	RMSD	RLig	RCent	RProt	CLig	CCent	CProt	GrSc	RMSDAl	NPol
1	2rh1	4amj	1	16	19	11	0.0587	0.1653	19	28	23	24	33	29	0.9740	0.3365	11
ColumnMeaning
NCliId of the clique (starts at 0)
RefName of the reference (protein name if -rn is not used)
CompName of the comparison (protein name if -cn is not used)
SimilSimilarity flag (empty is -sim is not used)
LIGNumber of matched LIG pseudoatoms
CENTERNumber of matched CENTERED pseudoatoms
PROTNumber of matched PROT peudoatoms
SumClSumCl score (clique‐based)
RMSDroot‐mean square deviation (in Å) of the clique
RLigNumber of reference LIG pseudoatoms
RCentNumber of reference CENTERED pseudoatoms
RProtNumber of reference PROT pseudoatoms
CLigNumber of comparison LIG pseudoatoms
CCentNumber of comparison CENTERED pseudoatoms
CProtNumber of comparison PROT pseudoatoms
GrScGrim score (empirical score)
RMSDAlroot‐mean square deviation (in Å) of the clique according to GrScore
NPolNumber of matched polar interaction pseudoatoms

Alongside the scores, GRIM writes GRIM_prot.mol2, GRIM_lig.mol2 and GRIM_ints.mol2 — the comparison complex moved into the reference frame — plus GRIM.log, which lists every matched pair of interaction points. Those aligned files are the input to realign.

Reuse interactions you already computed

If you already ran ints -type MERG, hand GRIM the pseudoatom files directly and skip detection. --values reports scores without writing the aligned structures.

IChem -sim 1 -rn 2rh1 -cn 4amj --values grim 2rh1_INTS_M.mol2 4amj_INTS_M.mol2
NCli	Ref	Comp	Simil	LIG	CENTER	PROT	SumCl	RMSD	RLig	RCent	RProt	CLig	CCent	CProt	GrSc	RMSDAl	NPol
1	2rh1	4amj	1	16	19	11	0.0587	0.1653	19	28	23	24	33	29	0.9740	0.3365	11

Screen docking poses

Given a site (site.mol2), a reference ligand (ligand.mol2) and docking poses (docked.mol2), GRIM scores every pose against the reference binding mode.

The file docked.txt summarized the docking results: pose number, docking score (pKd), RMSD to the true X‐ray pose.

PosepKdRMSD (Å)
ligand_0008.631.14
ligand_0018.351.08
ligand_0028.121.00
ligand_0038.071.14
ligand_0047.541.19
ligand_0057.101.28
ligand_0067.041.41
ligand_0076.901.08
ligand_0086.721.17
ligand_0096.671.34
ligand_0106.461.23
ligand_0116.341.47
ligand_0126.312.02
ligand_0136.303.67
ligand_0146.281.50
ligand_0156.281.27
ligand_0166.202.09
ligand_0176.161.18
ligand_0186.073.07
ligand_0196.043.54

All docking poses (docked.mol2) are matched to the X‐ray pose (ligand.mol2) for rescoring based on the interaction pattern graph similarity score (GrScore).

cd screen
IChem -rn 2rh1 --values grim site.mol2 ligand.mol2 docked.mol2

cat GrScreen.csv
REF	1.05313	48	14	14	20	0.202949	0.0721811	0.00215763	11

GrScreen.csv keeps the best possible alignment in the following table format:

ColumnDescription
1Reference
2GrSC (GrimScore)
3Total number of aligned graph nodes
4Number of aligned graph nodes (ligand)
5Number of aligned graph nodes (centered)
6Number of aligned graph nodes (protein)
7RMSD of the clique
8Clique score
9root‐mean square deviation (in Å) of the clique according to GrScore
10Number of matched polar interaction pseudoatoms

Grimscreen_res.tsv keeps them all. Ranking on the Grimscore column (GrSc) prioritises poses that best reproduce the reference interaction pattern, which is a considerably better filter than geometry alone.

The format of the Grimscreen_res.tsv file is explained below:

ColumnMeaning
NCliId of the clique (starts at 0)
RefName of the reference (protein name if -rn is not used)
CompName of the comparison (protein name if -cn is not used)
SimilSimilarity flag (empty is -sim is not used)
LIGNumber of matched LIG pseudoatoms
CENTERNumber of matched CENTERED pseudoatoms
PROTNumber of matched PROT peudoatoms
SumClSumCl score (clique‐based)
RMSDroot‐mean square deviation (in Å) of the clique
RLigNumber of reference LIG pseudoatoms
RCentNumber of reference CENTERED pseudoatoms
RProtNumber of reference PROT pseudoatoms
CLigNumber of comparison LIG pseudoatoms
CCentNumber of comparison CENTERED pseudoatoms
CProtNumber of comparison PROT pseudoatoms
GrScGrim score (empirical score)
RMSDAlroot‐mean square deviation (in Å) of the clique according to GrScore
NPolNumber of matched polar interaction pseudoatoms

The pose with the highest Grimscore is not the top‐ranked one (ligand_000) but pose 002. Interestingly, it is the pose with the smallest rmsd to the true X‐ray pose (see docking.txt)

Options are all adjustable and listed in the IChem full menu page.

Module 5

VolSite — cavity detection and druggability

volsite lays a grid over the protein, keeps the points that are buried enough to form a pocket, labels each with the pharmacophoric property a ligand atom would need there, and predicts how druggable the resulting cavity is. volsite can be run in two modes depending on whether coordinates of a bound ligand are given (ligand‐restricted mode) or not (unrestricted mode).

A known binding site

With a ligand supplied, detection is restricted to its site — fast, and the answer is about the pocket you care about.

cd "$ICHEM_DIR/dataset/test/VOLSITE/ligand"
IChem volsite protein.mol2 ligand.mol2
Ligand file : ligand.mol2
Protein name : Unknown
Druggability : 1.13
Prediction : Is Druggable
cat VolSite_Stat.csv
Name	NCav	Size	NPts	Volume	CA	CZ	O	OG	OD1	N	NZ	DU	Recovery	Drugg
CAU	1	4	115	388.125	31	37	3	12	0	22	6	4	53.913		/
CAU	1	6	160	540	44	44	6	20	0	30	10	6	38.75		/
CAU	1	8	205	691.875	58	56	6	22	1	37	15	10	30.2439		/
CAU	1	12	303	1022.62	83	74	9	26	8	56	30	17	20.462		/
CAU	1	ALL	321	1083.38	87	76	11	27	8	61	34	17	19.3146		1.12574

The VolSite_stat.csv summary recapitulates the properties of all detected cavities as follows:

ColumnMeaning
NameName of the ligand (mol2 file ligand header)
NCavCavity number
SizeDistance from the ligand for which cavity points are deleted (ALL: no truncation)
NPtsNumber of cavity points
VolumeCavity volume in Å3
CANumber of hydrophobic cavity points
CZNumber of aromatic cavity points
ONumber of H-bond acceptor cavity points
OGNumber of H-bond acceptor/donor cavity points
OD1Number of negatively charged cavity points
NNumber of H-bond donor cavity points
NZNumber of positively charged cavity points
DUNumber of dummy cavity points: no protein atom < 4.5 Å
Recovery% of the binding site enclosing the ligand
DruggEstimated druggbility: druggable if Drugg > 0; undruggable if Drugg < 0

Duggability estimation is performed on the full cavity (no truncation).

Each cut-off is also written as a MOL2 file (CAVITY_N1_4.mol2CAVITY_N1_ALL.mol2) that you can load into any viewer — the pocket appears as a cloud of property-coloured pseudoatoms.

The whole protein surface

Drop the ligand and VolSite scans everywhere, ranking what it finds. --desc adds a descriptor file for downstream modelling.

cd ../unrestricted
IChem --desc volsite protein.mol2
Run VolSite on : protein.mol2
Build the file descriptor.txt
6 Cavities found
End
cat VolSite_Stat.csv
Name	NCav	Size	Buriedness	NPts	Volume	CA	CZ	O	OG	OD1	N	NZ	DU	Drugg
/	1	ALL	84.9875	321	1083.38	87	76	11	27	8	61	34	17	1.12574
/	2	ALL	78.1878	149	502.875	63	15	4	15	8	12	13	19	0.71907
/	3	ALL	70.0841	133	448.875	30	9	6	5	0	32	28	23	-0.0102194
/	4	ALL	71.5261	80	270	36	11	3	5	2	7	0	16	0.543419
/	5	ALL	71.0452	78	263.25	53	9	0	0	0	2	0	14	1.05675
/	6	ALL	71.3473	75	253.125	18	5	5	0	18	1	18	10	-1.98361
END

In this mode, a new column (Buriedness) is added to VolSite_Stat.csv, describing the average buriedness of each cavity found.

The IChem ‐‐desc command outputs cavity properties as a vector of 89 reals that may be used for machine learning applications

NumberDescriptor
1Volume
2% of aromatic cavity points (CZ)
3% of hydrophobic points (CA)
4% of H‐bond acceptor points (O)
5% of negatively charged points (OD1)
6% of H‐bond acceptor & donor points (OG)
7% of H‐bond donor points (N)
8% of positively charged points (NZ)
9% of dummy points (DU)
10Percent of CZ points with a projection value below 40
11Percent of CZ points with a projection value between 40 and 50
12Percent of CZ points with a projection value between 50 and 60
13Percent of CZ points with a projection value between 60 and 70
14Percent of CZ points with a projection value between 70 and 80
15Percent of CZ points with a projection value between 80 and 90
16Percent of CZ points with a projection value between 90 and 100
17Percent of CZ points with a projection value between 100 and 110
18Percent of CZ points with a projection value between 110 and 120
19Percent of CZ points with a projection value of 120
20Percent of CA points with a projection value below 40
21Percent of CA points with a projection value between 40 and 50
22Percent of CA points with a projection value between 50 and 60
23Percent of CA points with a projection value between 60 and 70
24Percent of CA points with a projection value between 70 and 80
25Percent of CA points with a projection value between 80 and 90
26Percent of CA points with a projection value between 90 and 100
27Percent of CA points with a projection value between 100 and 110
28Percent of CA points with a projection value between 110 and 120
29Percent of CA points with a projection value of 120
30Percent of O points with a projection value below 40
31Percent of O points with a projection value between 40 and 50
32Percent of O points with a projection value between 50 and 60
33Percent of O points with a projection value between 60 and 70
34Percent of O points with a projection value between 70 and 80
35Percent of O points with a projection value between 80 and 90
36Percent of O points with a projection value between 90 and 100
37Percent of O points with a projection value between 100 and 110
38Percent of O points with a projection value between 110 and 120
39Percent of O points with a projection value of 120
40Percent of OD1 points with a projection value below 40
41Percent of OD1 points with a projection value between 40 and 50
42Percent of OD1 points with a projection value between 50 and 60
43Percent of OD1 points with a projection value between 60 and 70
44Percent of OD1 points with a projection value between 70 and 80
45Percent of OD1 points with a projection value between 80 and 90
46Percent of OD1 points with a projection value between 90 and 100
47Percent of OD1 points with a projection value between 100 and 110
48Percent of OD1 points with a projection value between 110 and 120
49Percent of OD1 points with a projection value of 120
50Percent of OG points with a projection value below 40
51Percent of OG points with a projection value between 40 and 50
52Percent of OG points with a projection value between 50 and 60
53Percent of OG points with a projection value between 60 and 70
54Percent of OG points with a projection value between 70 and 80
55Percent of OG points with a projection value between 80 and 90
56Percent of OG points with a projection value between 90 and 100
57Percent of OG points with a projection value between 100 and 110
58Percent of OG points with a projection value between 110 and 120
59Percent of OG points with a projection value of 120
60Percent of N points with a projection value below 40
61Percent of N points with a projection value between 40 and 50
62Percent of N points with a projection value between 50 and 60
63Percent of N points with a projection value between 60 and 70
64Percent of N points with a projection value between 70 and 80
65Percent of N points with a projection value between 80 and 90
66Percent of N points with a projection value between 90 and 100
67Percent of N points with a projection value between 100 and 110
68Percent of N points with a projection value between 110 and 120
69Percent of N points with a projection value of 120
70Percent of NZ points with a projection value below 40
71Percent of NZ points with a projection value between 40 and 50
72Percent of NZ points with a projection value between 50 and 60
73Percent of NZ points with a projection value between 60 and 70
74Percent of NZ points with a projection value between 70 and 80
75Percent of NZ points with a projection value between 80 and 90
76Percent of NZ points with a projection value between 90 and 100
77Percent of NZ points with a projection value between 100 and 110
78Percent of NZ points with a projection value between 110 and 120
79Percent of NZ points with a projection value of 120
80Percent of DU points with a projection value below 40
81Percent of DU points with a projection value between 40 and 50
82Percent of DU points with a projection value between 50 and 60
83Percent of DU points with a projection value between 60 and 70
84Percent of DU points with a projection value between 70 and 80
85Percent of DU points with a projection value between 80 and 90
86Percent of DU points with a projection value between 90 and 100
87Percent of DU points with a projection value between 100 and 110
88Percent of DU points with a projection value between 110 and 120
89Percent of DU points with a projection value of 120

The projection value is the number of regularly‐spaced 8 Å‐long vectors emitted from each cavity points intercepting the protein surface (maximum of 120).

Correspondence between projection value and buriedness

Projection valueBuriedness (%)
<40<33.3
40–5033.3–41.6
50–6041.6–50.0
60–7050.0–58.3
70–8058.3–66.6
80–9066.6–75.0
90–10075.0–83.3
100–11083.3–91.6
110–12091.6–99.9
120100

Cavity 1 is the orthosteric site found in the previous run — same 321 points, same 1.13 score — recovered here with no prior knowledge of where the ligand binds. Cavity 5 is small but scores 1.06, the sort of secondary pocket worth a look. Cavities 3 and 6 have negative scores and are not worth pursuing.

Cavity-based pharmacophores

--pharm converts the cavity into a pharmacophore you can screen with directly — no ligand required.

cd ../pharm
IChem --pharm volsite protein.mol2 ligand.mol2

ls Pharmacophore.*
Pharmacophore.chm  Pharmacophore.mol2  Pharmacophore.pml

30 features in total — 19 directional (H-bond donors and acceptors, written as vectors) and 11 positional (hydrophobic and aromatic points). The three files are the same model in three file formats: .chm for Discovery Studio and Pipeline Pilot, .pml for LigandScout, .mol2 for Shaper2. Add --outExclu for exclusion spheres.

Tuning detection

OptionDefaultEffect
-step1.5 ÅGrid spacing. Finer resolves small pockets at a cost in run time
-b55Minimum buriedness. Raise it to keep only deeply enclosed pockets
-nPTS / -NPTS70 / 400Cavity size bounds, in grid points
--cofactor / --dna / --solventoffTreat cofactors, nucleic acids or waters as part of the receptor
Druggability and defaults The druggability model was trained at the default settings. Change -step or -b and IChem warns that the Drugg column is no longer meaningful — the geometry stays valid, the prediction does not.

Options are all adjustable and listed in the IChem full menu page.

Module 6

Utils — buried surface, fragments, waters

Three self-contained utilities that answer questions which come up constantly but do not warrant a module of their own.

bsa — buried surface area

How much of the ligand the protein actually wraps around. A good first-pass check on whether a pose is plausibly buried.

cd "$ICHEM_DIR/dataset/test/BSA"
IChem utils bsa protein.mol2 ligand.mol2
2rh1_protein	70.1934	347.125

70.19 % of carazolol's surface is buried, amounting to 347.1 Ų. For a well-enclosed orthosteric site, 70 % is about what you would expect; a solvent-exposed surface binder would come in far lower.

frag — RECAP fragmentation in context

Cuts the bound ligand at RECAP bonds and reports each fragment together with the interactions it makes — so you can see which piece is earning its keep.

cd ../Frag
IChem utils frag protein.mol2 ligand.mol2 | tail -2
2rh1_protein|FRAG	ID	NHeavy	NLink	NRing	NArRing	TOT	CA	CZ	O	OD1	N	NZ	ZN
2rh1_protein|FRAG	1	18	2	3	2	23	17	1	2	2	1	0	0

18 heavy atoms, 2 cut points, 3 rings of which 2 aromatic, making 23 interactions — 17 of them hydrophobic. Each fragment is written out with its interaction pseudoatoms (*_FRAG_1_MOLE.mol2 and *_FRAG_1_INTS.mol2), which is the raw material for bioisosteric replacement.

4.Companion tools

Two smaller commands that support the six modules rather than standing on their own.

sims — compare fingerprints

Takes the fingerprints produced by IFP or ints and computes similarities. Two files gives one number; one file gives the full matrix.

cd "$ICHEM_DIR/dataset/test/SIMILARITY"
IChem --binary sims FP1.txt FP2.txt
FP1	FP2	0.809524

IChem --binary sims FP.txt
FP1	FP1	1
FP1	FP2	0.809524
FP1	FP3	0.652174
FP2	FP1	0.809524
FP2	FP2	1
FP2	FP3	0.714286
FP3	FP1	0.652174
FP3	FP2	0.714286
FP3	FP3	1

Tanimoto is the default. -metric also accepts HM (Hamming), RT (Rogers–Tanimoto), FT (Forbes), DI (Dice) and SO (Sokal). Hamming counts differing bits rather than scoring similarity, so it grows as the fingerprints diverge:

IChem --binary -metric HM sims FP1.txt FP2.txt
FP1	FP2	4

AtomProps — inspect atom typing

Prints how IChem typed every atom in a MOL2 file. When a contact you expected is missing from an IFP run, this is where to look first — an atom typed Apolar instead of Acceptor explains a lot.

IChem AtomProps ligand.mol2 | head -11
Molecule 1 with name REF from file: ligand.mol2

ATOM 	O17  |1    |CAU   0-XX
	 type : O.3
	 props : Acceptor
	 charge: 0

ATOM 	C16  |2    |CAU   0-XX
	 type : C.3
	 props : Hydrophobic|Apolar
	 charge: 0

It accepts several files at once and works on proteins, ligands and cavities alike.

Conventions that apply everywhere

RuleDetail
Options come first IChem [options] <tool> [arguments]. Anything after the tool keyword is treated as a filename.
Batch with -F IChem -F params.txt runs one command per line of the file.
More detail --verb for verbose output; --debug READ,DINT,GRID,MOLD to trace the parser, interaction detection, grid or molecular analysis.
Input format MOL2 throughout. pdbconv is the way in from PDB.

5.Python API

Since 5.3.8 the IFP engine is also callable directly from C++ and Python, without shelling out to the command line and parsing its output. The Python extension module is called ichem_ifp.

Not in the prebuilt binary The executable on the Download page is the CLI only. ichem_ifp is a separate extension module that has to be built from source with CMake and pybind11. Unlike every command elsewhere in this documentation, the snippets below have not been run against a build on this site — they describe the interface as published in the project changelog. Treat them as a reference, and check the repository for the current signatures.

Entry points

FunctionReturns
compute_ifp_interactions(protein_file, ligand_file, cfg) One LigandInteractions per ligand in the file — the same contacts the CLI prints as its interaction table
compute_ifp_fingerprints(protein_file, ligand_file, cfg) One LigandFingerprint per ligand, each carrying the residue list and the bit string
compute_ifp_tanimoto(protein_file, ligand_file, reference_file, cfg) TanimotoScore for every docked/reference pair — the three-argument CLI mode
compute_ifp_tanimoto_ensembles(protein1, ligand1, protein2, ligand2, cfg) The four-argument ensemble mode, comparing two protein/ligand sets

cfg is an IFPConfig and is optional; the defaults mirror the CLI. It carries the profile flags (basic, weakh, picat, metal, old), the residue rules (includeSolvent, includeCofactor, oldHydrophobic) and every distance and angle override available on the command line — D_Hb, d_Hyd, a_ArFF and the rest.

Shape of the result

Ranking poses in a script, rather than by piping the CLI through tail, looks roughly like this:

import ichem_ifp

cfg = ichem_ifp.IFPConfig()          # defaults match the CLI
cfg.basic = True                     # equivalent to --basic

scores = ichem_ifp.compute_ifp_tanimoto(
    "site.mol2", "docked.mol2", "ligand.mol2", cfg)

for s in sorted(scores, key=lambda x: -x.tanimoto):
    print(s.ligand, s.reference, round(s.tanimoto, 3))

The returned objects are plain read-only containers:

ClassAttributes
InteractionRecord type_interaction, atom_prot, id_atom_prot, residue, chain, atom_lig, id_atom_lig, distance
LigandInteractions ligand_name, interactions
LigandFingerprint ligand_name, residues, bitstring
TanimotoScore ligand, ligand_residues, ligand_bitstring, reference, reference_residues, reference_bitstring, tanimoto
Errors IChem's internal exceptions surface as Python RuntimeError, carrying the original error code and message — IChem::IFP error <code> <details> — so the CLI's diagnostics are preserved.