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

Source Code for Module rdkit.Chem.ChemUtils.AlignDepict

 1  # $Id: AlignDepict.py 736 2008-02-14 14:09:36Z landrgr1 $ 
 2  # 
 3  #  Copyright (C) 2006 Greg Landrum 
 4  #  This file is part of RDKit and covered by $RDBASE/license.txt 
 5  # 
 6  from rdkit import Chem 
 7  from rdkit.Chem import rdDepictor 
 8  from rdkit import Geometry 
 9   
10 -def AlignDepict(mol,core,corePattern=None,acceptFailure=False):
11 """ 12 13 Arguments: 14 - mol: the molecule to be aligned, this will come back 15 with a single conformer. 16 - core: a molecule with the core atoms to align to; 17 this should have a depiction. 18 - corePattern: (optional) an optional molecule to be used to 19 generate the atom mapping between the molecule 20 and the core. 21 """ 22 if core and corePattern: 23 if not core.GetNumAtoms(onlyHeavy=True)==corePattern.GetNumAtoms(onlyHeavy=True): 24 raise ValueError,'When a pattern is provided, it must have the same number of atoms as the core' 25 coreMatch = core.GetSubstructMatch(corePattern) 26 if not coreMatch: 27 raise ValueError,"Core does not map to itself" 28 else: 29 coreMatch = range(core.GetNumAtoms(onlyHeavy=True)) 30 if corePattern: 31 match = mol.GetSubstructMatch(corePattern) 32 else: 33 match = mol.GetSubstructMatch(core) 34 35 if not match: 36 if not acceptFailure: 37 raise ValueError,'Substructure match with core not found.' 38 else: 39 coordMap={} 40 else: 41 conf = core.GetConformer() 42 coordMap={} 43 for i,idx in enumerate(match): 44 pt3 = conf.GetAtomPosition(coreMatch[i]) 45 pt2 = Geometry.Point2D(pt3.x,pt3.y) 46 coordMap[idx] = pt2 47 rdDepictor.Compute2DCoords(mol,clearConfs=True,coordMap=coordMap)
48 49 if __name__=='__main__': 50 import sys,getopt 51
52 - def Usage():
53 pass
54 55 args,extras = getopt.getopt(sys.argv[1:],'p:ho:',['smiles','pattern=']) 56 if len(extras)!=2: 57 print >>sys.stderr,'ERROR: Not enough arguments' 58 Usage() 59 sys.exit(1) 60 patt = None 61 useSmiles = False 62 outF=None 63 for arg,val in args: 64 if arg=='-h': 65 Usage() 66 sys.exit(0) 67 elif arg=='-p' or arg=='--pattern': 68 patt = Chem.MolFromSmarts(val) 69 elif arg=='--smiles': 70 useSmiles = True 71 elif arg=='-o': 72 outF = val 73 74 if not useSmiles: 75 core = Chem.MolFromMolFile(extras[0]) 76 else: 77 core = Chem.MolFromSmiles(extras[0]) 78 rdDepictor.Compute2DCoords(core) 79 80 if not useSmiles: 81 mol = Chem.MolFromMolFile(extras[1]) 82 else: 83 mol = Chem.MolFromSmiles(extras[1]) 84 85 AlignDepict(mol,core,patt) 86 87 if outF: 88 outF = open(outF,'w+') 89 else: 90 outF = sys.stdout 91 92 print >>outF,Chem.MolToMolBlock(mol) 93