Package: uamc-qed
QED packageQEDstands for quantitative estimation of drug-likeness and the concept has been introduced by Richard Bickerton and coworkersBickerton, G.R.; Paolini, G.V.; Besnard, J.; Muresan, S.; Hopkins, A.L. (2012) ‘Quantifying the chemical beauty of drugs’, Nature Chemistry, 4, 90-98. This module relies onRDKitas a chem-informatics toolkit.IntroductionThis section is about installing and usingQEDwithin your own Python scripts or as a standalone Python tool.The empirical rationale of theQEDmeasure reflects the underlying distribution of molecular properties including molecular weight, logP, topological polar surface area, number of hydrogen bond donors and acceptors, the number of aromatic rings and rotatable bonds, and the presence of unwanted chemical functionalities.TheQEDresults as generated by this module are not completely identical to those from theoriginal publication. These differences are a consequence of differences within the underlying calculated property calculators used in both methods. For example, discrepancies can be noted in the results from the logP calculations, nevertheless despite the fact that both approaches (Pipeline Pilot in the original publication and RDKit in this implementation) mention to use theWildmann and Crippenmethodology for the calculation of their logP-values. In this respect, Gregory Gerebtzoff has been so kind to perform a refitting of theQEDparameters with logP values generated by RDKit (see rdkit-discuss). These refitted values have been implemented inQEDas the default values; however, the original publication values can still be used if desired.
This section assumes you have installed RDKit correctly and that you are familiar with the basic functions of it. It is also recommended to have read the originalQED publication.InstallationThere are two ways to installQED. The first one is by download from theGitHubrepository and installing, and the second way is using Python's standardpipapproach. Both methods are explained below.1. Installing withpipThis is probably the easiest way to installQED. First make sure you havepipinstalled:> pip -Vpip 20.0.2 from /Users/hans/anaconda3/envs/rdkit/lib/python3.7/site-packages/pip (python 3.7)Ifpipis not installed, then install it first by following thesepip installation notes.Now you are ready to installQED:> pip install uamc-qedDepending on yourpythonlocation, it might be that you need admin rights. In that case, type:> sudo pip install uamc-qed2. Alternative manner: download from Github and runsetup.py installDownloadQEDfromGitHub. In this section we assume you have downloaded the file into your~/Downloadsdirectory) and untar this file into this directory:> cd ~/Downloads> sudo tar -xvf uamc-qed-1.0.2.tar.gz> cd uamc-qed-1.0.2You should now have a number of files in your~/Downloads/uamc-qed-1.0.2directory:> ls -lqed-1.0.2/qed-1.0.2/LICENSEqed-1.0.2/README.mdqed-1.0.2/dist/qed-1.0.2/how_to_make_distribution.txtqed-1.0.2/qed/qed-1.0.2/setup.pyMove into thedistdirectory anduntaragain:> cd dist
> tar -xvf qed-1.0.2.tar.gz
> cd qed-1.0.2Now install with Python:> python setup.py installThis process creates aqedfolder with all theqedfiles into your default Python site-package install directory. It might be that you need to get root permissions:> sudo python setup.py installCheck your installation by launchingPython:>>>fromqedimportqed>>>fromrdkitimportChem>>>m=Chem.MolFromSmiles('c1ccccc1')>>>qed.default(m)0.44619898311523704Using QEDTheqed()function takes as argument a RDKit molecule and returns the corresponding QED value calculated from it.
Theqed()function comes in three flavors, each differing in the relative weight that is imposed on the underlyingmolecular descriptors. These three flavors correspond to the three differentQEDmeasures that were described in the original publication:QEDw,maxusing the set of weights that give maximal information content.QEDw,mousing the mean weights of the optimal 1,000 weight combinations that give the highest information content.QEDw,uwith all weights as unity, hence unweighted.Specifying the required QED weighting scheme inQEDis done using the corresponding function:qed.weights_mean()uses the mean weighting scheme and corresponds to QEDw,mo. Another name for this function isqed.default().qed.weights_max()specifies the max weighting scheme and corresponds to QEDw,max.qed.weights_none()specifies unit weights and corresponds to QEDw,u.and exemplified below:>>>fromqedimportqed>>>fromrdkitimportChem>>>m=Chem.MolFromSmiles('c1ccccc1')>>>qed.default(m)0.44619898311523704>>>qed.weights_mean(m)0.44619898311523704>>>qed.weights_max(m)0.4733526950948539>>>qed.weights_none(m)0.3047153431243204As already mentioned above, the current implementation ofQEDuses the refitted logP parameters from Gregory Gerebtzoff. However, the original values can still be used by specifyingFalseas second argument to the appropriate function call:>>>qed.default(m,False)0.4426283718993647>>>qed.weights_mean(m,False)0.4426283718993647>>>qed.weights_max(m,False)0.4706596045646091>>>qed.weights_none(m,False)0.3021185764176498TheQEDmodule also provides its own test set:>>>test=qed.test_data()>>>fornameintest:print(test[name],name)...Nc1nc(NC2CC2)c2ncn([C@@H]3C[C@H](CO)C=C3)c2n1AbacavirCC(=O)NCCCS(O)(=O)=OAcamprosateCCCC(=O)Nc1ccc(OCC(O)CNC(C)C)c(c1)C(C)=OAcebutololCC(=O)Nc1ccc(O)cc1AcetaminophenCC(=O)Nc1nnc(s1)S(N)(=O)=OAcetazolamideCC(=O)c1ccc(cc1)S(=O)(=O)NC(=O)NC1CCCCC1AcetohexamideCC(=O)c1ccc2Sc3ccccc3N(CCCN3CCN(CCO)CC3)c2c1AcetophenazineFc4ccc(C1CCNCC1COc3ccc2OCOc2c3)cc4ParoxetineCc1oncc1C(=O)Nc2ccc(C(F)(F)F)cc2LeflunomideCN1C4CCCC1CC(NC(=O)c2nn(C)c3ccccc23)C4GranisetronCCCN2CC(CSC)CC1c3cccc4[nH]cc(CC12)c34PergolideCCc3c(C)[nH]c2CCC(CN1CCOCC1)C(=O)c23MolindoneCCCCCCCCCCCCCCCC(=O)OCC(NC(=O)C(Cl)Cl)C(O)c1ccc([N+]([O-])=O)cc1ChloramphenicalPalmitateCCCCCCCCCCCCCCCOC(=O)C2C(O)C(O)C(C(NC(=O)C1CC(CCC)CN1C)C(C)Cl)OC2SCClindamycinPalmitateCCOc3nc2cccc(C(=O)OC(C)OC(=O)OC1CCCCC1)c2n3Cc6ccc(c4ccccc4c5nn[nH]n5)cc6CandesartanCilexetilCN(C)CCC=c2c1ccccc1sc3ccc(Cl)cc23ChlorprothixeneO=c3c(O)c(C2CCC(c1ccc(Cl)cc1)CC2)c(=O)c4ccccc34AtovaquoneCN(C)CCCN3c1ccccc1CCc2ccc(Cl)cc23ClomipramineCN4CCCC(CC3c1ccccc1Sc2ccccc23)C4MethixeneCCN(CC)C(C)Cn3c1ccccc1sc2ccccc23EthopropazineN=C(CCSCc1csc(N=C(N)N)n1)NS(N)(=O)=OFamotidineCNC(=NCCSCc1nc[nH]c1C)NC#N CimetidineCCCCCNC(=N)NN=Cc1c[nH]c2ccc(CO)cc12TegaserodC=CC3=C(C(=O)O)N2C(=O)C(NC(=O)C(=NO)c1csc(N)n1)C2SC3CefdinirCC5(C)SC4C(NC(=O)C(C(=O)Oc2ccc1CCCc1c2)c3ccccc3)C(=O)N4C5C(=O)OCarbenicillinIndanylOne can inspect the individual properties that are used to calculate the Qed value by calling theproperties()function:>>>fornameintest:...mol=Chem.MolFromSmiles(test[name])...p=qed.properties(mol)...print("%6.2f\t%6.3f\t%6d\t%6d\t%6.2f\t%6d\t%6d\t%6d\t%6.3f\t%-s"%(p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7],qed.default(mol),name))...286.341.09263101.884210.737Abacavir181.21-0.6004283.474020.467Acamprosate336.432.3655387.6610110.571Acebutolol151.161.3512249.331110.602Acetaminophen222.25-0.85652115.042110.662Acetazolamide324.402.2104292.344110.833Acetohexamide411.573.4926147.027210.688Acetophenazine329.373.3274139.724200.917Paroxetine270.213.2543155.132200.896Leflunomide312.422.3183150.162200.927Granisetron314.504.2712119.034200.871Pergolide276.381.9633145.333100.923Molindone561.556.94162118.7721150.056ChloramphenicalPalmitate663.416.27983108.3322030.071ClindamycinPalmitate610.676.319101143.3410520.141CandesartanCilexetil315.875.188203.243300.629Chlorprothixene366.845.5053154.372200.741Atovaquone314.864.528206.484200.782Clomipramine309.485.015203.242200.735Methixene312.485.020306.485200.734Ethopropazine337.46-0.55865173.337130.263Famotidine252.350.5975388.895150.239Cimetidine301.392.2983596.297240.235Tegaserod395.42-0.17284158.215140.239Cefdinir494.572.49672113.016240.274CarbenicillinIndanyl>>>print("    MW\tALOGP\tHBA\tHBD\tPSA\tROTB\tAROM\tALERTS\tQED\tNAME")MWALOGPHBAHBDPSAROTBAROMALERTSQEDNAMERevision historyVersion 1.0.2Added to the PyPi repository to enable installation usingpip.Version 1.0.1Incorporation of the refitted logP parameters of Gregory Gerebtzoff and making these values default (rdkit-discuss).Modification of theqed()function to enable the selection of the original parameters, if desired.DOI identifierDOI:10.5281/zenodo.4293730