mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-06 22:17:02 +08:00
67 lines
1.5 KiB
Python
67 lines
1.5 KiB
Python
# $Id$
|
|
#
|
|
# Copyright (C) 2005-2006 Rational Discovery LLC
|
|
#
|
|
# @@ All Rights Reserved @@
|
|
#
|
|
import random
|
|
import Chem
|
|
|
|
def RandomizeMolBlock(molB):
|
|
splitB = molB.split('\n')
|
|
res = []
|
|
res.extend(splitB[0:3])
|
|
idx = 3
|
|
inL = splitB[idx]
|
|
res.append(inL)
|
|
nAts = int(inL[0:3])
|
|
nBonds = int(inL[3:6])
|
|
|
|
idx+=1
|
|
atLines = splitB[idx:idx+nAts]
|
|
|
|
order = range(nAts)
|
|
random.shuffle(order)
|
|
|
|
for i in order:
|
|
res.append(atLines[i])
|
|
|
|
#print 'ORDER:',order
|
|
idx += nAts
|
|
for i in range(nBonds):
|
|
inL = splitB[idx]
|
|
idx1 = int(inL[0:3])-1
|
|
idx2 = int(inL[3:6])-1
|
|
idx1 = order.index(idx1)
|
|
idx2 = order.index(idx2)
|
|
inL = '% 3d% 3d'%(idx1+1,idx2+1)+inL[6:]
|
|
res.append(inL)
|
|
idx += 1
|
|
res.append('M END')
|
|
return '\n'.join(res)
|
|
|
|
def RandomizeMol(mol):
|
|
mb = Chem.MolToMolBlock(mol)
|
|
#print '-----------------'
|
|
#print mb
|
|
mb = RandomizeMolBlock(mb)
|
|
#print mb
|
|
return Chem.MolFromMolBlock(mb)
|
|
|
|
def CheckCanonicalization(mol,nReps=10):
|
|
refSmi = Chem.MolToSmiles(mol,False)
|
|
for i in range(nReps):
|
|
m2 = RandomizeMol(mol)
|
|
smi = Chem.MolToSmiles(m2,False)
|
|
if smi!=refSmi:
|
|
raise ValueError,'\nRef: %s\n : %s'%(refSmi,smi)
|
|
|
|
|
|
|
|
if __name__=='__main__':
|
|
from Chem import Randomize
|
|
CheckCanonicalization(Chem.MolFromSmiles('CON'))
|
|
CheckCanonicalization(Chem.MolFromSmiles('c1ccccn1'))
|
|
CheckCanonicalization(Chem.MolFromSmiles('C/C=C/F'))
|
|
|