Package rdkit :: Package Chem :: Module TemplateAlign
[hide private]
[frames] | no frames]

Module TemplateAlign

source code

Functions [hide private]
 
AlignMolToTemplate2D(mol, template, match=None, clearConfs=False, templateConfId=-1)
Arguments:
source code
 
_test() source code
Variables [hide private]
  __package__ = 'rdkit.Chem'

Imports: Chem, rdDepictor, Geometry


Function Details [hide private]

AlignMolToTemplate2D(mol, template, match=None, clearConfs=False, templateConfId=-1)

source code 

Arguments:

  - mol:      the molecule to be aligned
  - template: the template to align to
  - match:    If provided, this should be a sequence of integers
              containing the indices of the atoms in mol that match
              those in template. This is the result of calling:
                mol.GetSubstructMatch(template)
  - clearConfs: toggles removing any existing conformers on mol

 Returns the confId of the conformer containing the depiction

 >>> patt = Chem.MolFromSmiles('C1CC1')
 >>> rdDepictor.Compute2DCoords(patt)
 0
 >>> mol = Chem.MolFromSmiles('OC1CC1CC1CCC1')
 >>> rdDepictor.Compute2DCoords(mol)
 0
 >>> pc = patt.GetConformer(0)
 >>> mc = mol.GetConformer(0)

 We start out with the molecules not aligned:
 >>> vs = [abs(pc.GetAtomPosition(i).x-mc.GetAtomPosition(i+1).x) for i in range(pc.GetNumAtoms())]
 >>> [x<1e-4 for x in vs]
 [False, False, False]

 But then we can replace the conformer of mol:
 >>> AlignMolToTemplate2D(mol,patt,clearConfs=True)
 0
 >>> mol.GetNumConformers()
 1
 >>> pc = patt.GetConformer(0)
 >>> mc = mol.GetConformer(0)
 >>> vs = [abs(pc.GetAtomPosition(i).x-mc.GetAtomPosition(i+1).x) for i in range(pc.GetNumAtoms())]
 >>> [x<1e-4 for x in vs]
 [True, True, True]

 If we like, we can specify the atom map explicitly in order to align to the second
 matching ring in the probe molecule:
 >>> match = (5,6,7)
 >>> AlignMolToTemplate2D(mol,patt,clearConfs=True,match=match)
 0
 >>> mol.GetNumConformers()
 1
 >>> pc = patt.GetConformer(0)
 >>> mc = mol.GetConformer(0)
 >>> vs = [abs(pc.GetAtomPosition(i).x-mc.GetAtomPosition(i+1).x) for i in range(pc.GetNumAtoms())]
 >>> [x<1e-4 for x in vs]
 [False, False, False]
 >>> vs = [abs(pc.GetAtomPosition(i).x-mc.GetAtomPosition(i+5).x) for i in range(pc.GetNumAtoms())]
 >>> [x<1e-4 for x in vs]
 [True, True, True]