def Get3dDescriptor(molObject): """ Get all 3D descriptor Args: Returns: List Raise: Exceptions """ value_list = [] value_list.append(Descriptors3D.Asphericity(molObject)) value_list.append(Descriptors3D.Eccentricity(molObject)) value_list.append(Descriptors3D.InertialShapeFactor(molObject)) value_list.append(Descriptors3D.NPR1(molObject)) value_list.append(Descriptors3D.NPR2(molObject)) value_list.append(Descriptors3D.PMI1(molObject)) value_list.append(Descriptors3D.PMI2(molObject)) value_list.append(Descriptors3D.PMI3(molObject)) value_list.append( Descriptors3D.RadiusOfGyration(molObject)) # Radius of gyration value_list.append( Descriptors3D.SpherocityIndex(molObject)) # Spherocity Index value_list.append(rdMolDescriptors.CalcPBF( molObject)) # Returns the PBF (plane of best fit) descriptor value_list += rdMolDescriptors.CalcAUTOCORR3D(molObject) value_list += rdMolDescriptors.CalcRDF(molObject) value_list += rdMolDescriptors.CalcMORSE(molObject) value_list += rdMolDescriptors.CalcWHIM(molObject) value_list += rdMolDescriptors.CalcGETAWAY(molObject) return value_list
def get3D(m,is3d): if not is3d: m = Chem.AddHs(m) AllChem.EmbedMolecule(m) AllChem.MMFFOptimizeMolecule(m) r= rdMD.CalcAUTOCORR3D(m)+rdMD.CalcRDF(m)+rdMD.CalcMORSE(m)+rdMD.CalcWHIM(m)+rdMD.CalcGETAWAY(m) return r
def get_3d_representation(xyz, smiles, method, mol=None): """ Args: xyz (torch.Tensor): atom type and xyz of geometry. smiles (str): SMILES string method (str): RDKit method for 3D representation mol (rdkit.Chem.rdchem.Mol): RDKit mol object Returns: result (np.array): fingerprint """ representation_fn = { 'autocorrelation_3d': rdMD.CalcAUTOCORR3D, 'rdf': rdMD.CalcRDF, 'morse': rdMD.CalcMORSE, 'whim': rdMD.CalcWHIM, 'getaway': lambda x: rdMD.CalcWHIM(x, precision=0.001) } # if a `mol` is not given, generate it from the xyz and smiles if mol is None: mol = get_mol(xyz=xyz, smiles=smiles) fn = representation_fn[method] result = fn(mol) return result
def get3D(m,is3d): if not is3d: m = Chem.AddHs(m) # define the new code from RDKit Molecule 3D ETKDG. ps = AllChem.ETKDG() ps.randomSeed = 0xf00d AllChem.EmbedMolecule(m,ps) r= rdMD.CalcAUTOCORR3D(m)+rdMD.CalcRDF(m)+rdMD.CalcMORSE(m)+rdMD.CalcWHIM(m)+rdMD.CalcGETAWAY(m, precision=0.001) return r
def get_WHIM(x, from_smiles): if from_smiles: mol = Chem.MolFromSmiles(x) else: mol = x if (mol is None) or (len(mol.GetAtoms()) == 0): return [0] * 114 else: mol_3D = Chem.AddHs(mol) AllChem.EmbedMolecule(mol_3D) AllChem.MMFFOptimizeMolecule(mol_3D) return rdMolDescriptors.CalcWHIM(mol_3D)
def test6WHIM(self): with open(os.path.join(self.dataDir, 'whim.new.out')) as refFile: for i, m in enumerate(self.suppl): if i > 10: break nm = m.GetProp('_Name') inl = refFile.readline() split = inl.split('\t') self.assertEqual(split[0], nm) split.pop(0) vs = _gen3D(m, True, lambda x: rdMD.CalcWHIM(x, thresh=0.01)) for rv, nv in zip(split, vs): self.assertAlmostEqual(float(rv), nv, delta=0.01)
def getWHIM(mol3D): dout = {} try: lwhim = rdMolDescriptors.CalcWHIM(mol3D) except: lwhim = [] if lwhim != []: for i in range(1, len(lwhim) + 1): val = lwhim[i - 1] if math.isnan(val) == True: dout["WHIM" + str(i)] = "NA" else: dout["WHIM" + str(i)] = round(val, 6) return dout else: for desc in _whim3D.keys(): dout[desc] = "NA" return dout
A = [ '[H][H]', 'B', 'O=O', 'C', 'CC', 'CCC', 'CCCC', 'CCCCC', 'CCCCCC', 'CO', 'CCO', 'CCCO', 'CCCCO', 'CCCCCO', 'CCCCCCO', 'CCl', 'CCCl', 'CCCCl', 'CCCCCl', 'CCCCCCl', 'CCCCCCCl', 'CBr', 'CCBr', 'CCCBr', 'CCCCBr', 'CCCCCBr', 'CCCCCCBr', 'CI', 'CCI', 'CCCI', 'CCCCI', 'CCCCCI', 'CCCCCCI', 'CF', 'CCF', 'CCCF', 'CCCCF', 'CCCCCF', 'CCCCCCF', 'CS', 'CCS', 'CCCS', 'CCCCS', 'CCCCCS', 'CCCCCCS', 'CN', 'CCN', 'CCCN', 'CCCCN', 'CCCCCN', 'CCCCCCN' ] for smi in A: m = Chem.MolFromSmiles(smi) m = localopt(m, 100) #r=get3D(m,True) print smi print "---------" r = rdMD.CalcWHIM(m) print "Ei:" + str(r[0]) + "," + str(r[1]) + "," + str(r[2]) + "\n" print "Gi:" + str(r[5]) + "," + str(r[6]) + "," + str(r[7]) + "\n" print "SI:" + str(rdMD.CalcSpherocityIndex(m)) print "AS:" + str(rdMD.CalcAsphericity(m)) print "EX:" + str(rdMD.CalcEccentricity(m)) for item in r: thefile.write("%.3f," % item) thefile.write("\n") #m.SetProp("smi", smi) #writer.write(m) thefile = open('testBPA.txt', 'w') writer = Chem.SDWriter('3DBPAmol.sdf') B = [ 'CN(C)CC(Br)c1ccccc1', 'CN(C)CC(Br)c1ccc(F)cc1', 'CN(C)CC(Br)c1ccc(Cl)cc1',