rdkit.Chem.PropertyMol module — The RDKit 2016.09.1 documentation

# rdkit.Chem.PropertyMol module

class `rdkit.Chem.PropertyMol.` `PropertyMol`(mol)

  Bases: `rdkit.Chem.rdchem.Mol`

  allows rdkit molecules to be pickled with their properties saved.

      >>> import os
      >>> from rdkit.six.moves import cPickle
      >>> from rdkit import RDConfig
      >>> m = Chem.MolFromMolFile(os.path.join(RDConfig.RDCodeDir, 'Chem', 'test_data/benzene.mol'))
      >>> m.GetProp('_Name')
      'benzene.mol'

  by default pickling removes properties: >>> m2 = cPickle.loads(cPickle.dumps(m)) >>> m2.HasProp(‘_Name’) 0

  Property mols solve this: >>> pm = PropertyMol(m) >>> pm.GetProp(‘_Name’) ‘benzene.mol’ >>> pm.SetProp(‘MyProp’,’foo’) >>> pm.HasProp(‘MyProp’) 1

      >>> pm2 = cPickle.loads(cPickle.dumps(pm))
      >>> Chem.MolToSmiles(pm2)
      'c1ccccc1'
      >>> pm2.GetProp('_Name')
      'benzene.mol'
      >>> pm2.HasProp('MyProp')
      1
      >>> pm2.GetProp('MyProp')
      'foo'
      >>> pm2.HasProp('MissingProp')
      0

  Property mols are a bit more permissive about the types of property values: >>> pm.SetProp(‘IntVal’,1)

  That wouldn’t work with a standard mol

  but the Property mols still convert all values to strings before storing: >>> pm.GetProp(‘IntVal’) ‘1’

  This is a test for sf.net issue 2880943: make sure properties end up in SD files: >>> import tempfile,os >>> fn = tempfile.mktemp(‘.sdf’) >>> w = Chem.SDWriter(fn) >>> w.write(pm) >>> w=None >>> txt = open(fn,’r’).read() >>> ‘<IntVal>’ in txt True >>> try: ... os.unlink(fn) ... except Exception: ... pass

  The next level of that bug: does writing a depickled propertymol to an SD file include properties: >>> fn = tempfile.mktemp(‘.sdf’) >>> w = Chem.SDWriter(fn) >>> pm = cPickle.loads(cPickle.dumps(pm)) >>> w.write(pm) >>> w=None >>> txt = open(fn,’r’).read() >>> ‘<IntVal>’ in txt True >>> try: ... os.unlink(fn) ... except Exception: ... pass

  `SetProp`(nm, val)