Skip to main content
    Drug Discovery

    18 min read

    RDKit logP vs Measured logP and Solubility: How Far Do Calculated Properties Go?

    Crippen logP, TPSA and the rule-of-five descriptors against shake-flask partition coefficients and measured aqueous solubility: what the numbers can carry, and where they stop

    Ivy Biosciences

    how this was written

    an AI agent, from a research brief and primary literature. reviewed and edited by the ivy biosciences team before publishing.

    Calculated logP and TPSA are good enough to rank and filter compounds, and not good enough to stand in for a measurement. RDKit's MolLogP is the Wildman–Crippen atom-contribution model (Wildman & Crippen, J. Chem. Inf. Comput. Sci. 1999), and its fit statistics (r² = 0.918, σ = 0.677 log units over 9,920 training molecules) describe a model that is right on average and about two-thirds of a log unit off for a typical compound. In the blind SAMPL6 logP challenge, MOE's SlogP, another implementation of the same model, scored an RMSE of 0.55 log units on 11 small molecules (Işık et al., J. Comput.-Aided Mol. Des. 2020). Errors grow with molecular size (Mannhold et al., J. Pharm. Sci. 2009). Aqueous solubility is harder still, because it depends on the solid as well as the molecule. Descriptor-only models land within a factor of 5–8 of the measured value (Delaney, J. Chem. Inf. Comput. Sci. 2004). Use calculated properties to sort a list, set loose gates and flag outliers. Measure logP, logD and solubility before any decision that depends on the exact value.

    That is the frame for this page. On .bloom*, the rdkit_full job computes these descriptors and applies the filters built on them. Shake-flask partitioning and solubility assays are laboratory measurements, and nothing here replaces them. For where calculated physicochemistry sits among learned ADMET models, see A Practical Guide to ADMET Prediction.

    At a Glance#

    PropertyWhat RDKit computesWhat the lab measuresHow far the calculation goes
    logPMolLogP: sum of 68 Wildman–Crippen atom contributionsOctanol/water partition of the neutral species (OECD 107, 117)~0.5 log units on small neutral molecules; worse for large or unusual ones
    logD (pH 7.4)Nothing: no ionisation model in the descriptorPartition at a defined pH, all speciesOut of scope for MolLogP
    Polar surface areaTPSA: fragment sum, N and O only by defaultNot measured directly; 3D PSA is itself computedr = 0.99 against 3D PSA; a proxy for transport, not a measurement
    Aqueous solubilityNothing directly; supplies inputs (logP, MW, rotatable bonds)Thermodynamic or kinetic solubility (OECD 105, CheqSol, turbidimetric)Descriptor models within a factor of 5–8; melting point and polymorph not visible
    H-bond donors/acceptorsNumHDonors, NumHAcceptors (pattern-based)Not measured; rule-of-five counts are definitionsExact, but the definition differs from Lipinski's N+O count
    Runs on .bloom*Yes, rdkit_full (descriptors, filter)No; laboratory assaysn/a

    The left-hand column is deterministic: the same SMILES and RDKit version always give the same number. The right-hand column is a measurement, with an error bar of its own. Most of the confusion in this area comes from treating the first as if it carried the second.

    Calculated logP: What Crippen Actually Computes#

    The model#

    Wildman and Crippen classify every atom in a molecule into one of 68 atom types and assign each type a fixed contribution to logP. The molecule's logP is the sum. The contributions were fitted to 9,920 molecules with r² = 0.918 and σ = 0.677, and a separate set of 3,412 molecules gave the contributions to molar refractivity, which RDKit exposes as MolMR (Wildman & Crippen 1999). RDKit's Descriptors.MolLogP and Crippen.MolLogP both carry that citation in the source (rdkit/rdkit).

    Read those statistics for what they are: the fit to the training set. A residual standard deviation of 0.677 log units on data the model has seen is an optimistic floor for compounds it has not seen, not a prospective error bar.

    The additive assumption is also the model's main limitation. The SAMPL6 overview puts it plainly: "the assumption of independent atomic contributions fails for compounds with complex aromatic systems or stronger electronic effects" (Işık et al. 2020). Fragment methods such as CLogP add correction factors for exactly that reason. Crippen does not, which is why it is fast and why it is blunt.

    What the blind tests show#

    Two benchmarks bracket the realistic error.

    SAMPL6 (small, clean, blind). Participants predicted the octanol/water logP of the neutral species of 11 compounds, measured potentiometrically, before the values were released. Across 91 prediction sets from 27 groups, 10 methods reached an RMSE below 0.5 log units. MOE's SlogP, a Wildman–Crippen implementation run as a post-deadline reference, scored an RMSE of 0.55 (95% CI 0.38–0.71), MAE 0.47 and R² 0.69. The authors also note the limitation of their own set: its dynamic range was narrow, and they recommend at least a 1–5 logP range for future challenges (Işık et al. 2020). Eleven compounds with a narrow range cannot tell you how an additive model behaves on a lipophilic macrocycle.

    Mannhold et al. (large, industrial). This comparison tested 30 methods on a public set of 266 compounds and 18 methods on in-house sets from Nycomed (882 compounds) and Pfizer (95,809 compounds). Its baseline was the arithmetic average model, which predicts the dataset mean for every compound, and any method with a larger RMSE than that baseline was graded unacceptable. Most methods were reasonable on the public set, only seven succeeded on both industrial sets, and accuracy declined with the number of non-hydrogen atoms. A two-term equation in carbon and heteroatom counts outperformed many of the programs tested (Mannhold et al. 2009).

    The practical lesson from the second benchmark matters more than any single RMSE. On a real discovery library, a logP method is not obviously better than predicting the library mean, and the compounds where it fails are the large ones you most want to get right.

    What the measurement is#

    The reference value is a partition, not a property of the structure alone.

    OECD Test Guideline 107 is the shake-flask method: equilibrate the compound between n-octanol and water, separate the phases, and measure the concentration in each (OECD TG 107, 1995).

    OECD Test Guideline 117 estimates logP from HPLC retention against calibration standards (OECD TG 117, 2022). Methods do not transfer cleanly between each other. SAMPL6 cites a comparison in which logP values for Boehringer Ingelheim compounds, measured with GLpKa and HPLC assays over 0–7 log units, agreed with R² = 0.56. A model trained on one assay's values and tested on another's will look worse than it is (Işık et al. 2020).

    Two consequences follow for anyone comparing RDKit's number with a measurement:

    • logP is for the neutral species. For an ionisable drug, the quantity that governs behaviour at physiological pH is logD, the partition of all species at a defined pH. MolLogP has no ionisation model, so for an acid or a base that is mostly charged at pH 7.4 the calculated logP will sit above the logD you measure. That gap comes from the pKa, not from Crippen's error, and no descriptor in the table above will show it. SAMPL5 participants who predicted a distribution coefficient found it hard for exactly this reason, and SAMPL6 switched to the neutral species to remove it.
    • The comparison has two error bars. Before you call a calculated value wrong, check which assay produced the measured one, at what pH, and whether the species was neutral.

    TPSA and the Rule-of-Five Counts: Definitions, Not Estimates#

    TPSA is a different kind of descriptor. There is no laboratory measurement of polar surface area to compare it with. Ertl, Rohde and Selzer built it as a fast substitute for 3D polar surface area: a sum of tabulated surface contributions of polar fragments, which correlates with 3D PSA at r = 0.99 over 34,810 World Drug Index molecules and runs two to three orders of magnitude faster (Ertl et al., J. Med. Chem. 2000). Its value as a property comes from its correlation with transport. The same paper validates it against intestinal absorption, Caco-2 permeability and blood–brain barrier penetration data.

    Two details change the numbers you get:

    • Sulfur and phosphorus are excluded by default. The 2000 paper tabulates S and P contributions, but RDKit follows the Daylight implementation, which counts only N and O. The source records the reason: according to Ertl, the correlation with ADME properties is better that way (rdkit/rdkit). Thiophene therefore has a TPSA of 0 by default and 28.24 Ų with includeSandP=True (RDKit 2025.09). Sulfonamide- and phosphate-heavy series shift the most.
    • H-bond acceptor counts depend on the definition. RDKit's NumHAcceptors is a pattern-based acceptor count. Lipinski's rule of five counted nitrogens and oxygens, which RDKit exposes separately as NOCount. For aspirin the two give 3 and 4.

    Both choices are defensible. What matters is that a threshold carries the convention it was derived with.

    The rule-of-five logP threshold was not set on Crippen logP. Lipinski's rule says poor absorption or permeation is more likely with more than 5 H-bond donors, more than 10 acceptors, molecular weight above 500, and a calculated logP above 5 measured as CLogP, or above 4.15 measured as MLogP (Lipinski et al., Adv. Drug Deliv. Rev. 200100129-0)). The two thresholds differ because the two calculators differ. Applying MolLogP > 5 assumes Crippen and CLogP agree, and the benchmarks above say they agree only on average. A compound at Crippen logP 4.8 is not reliably on the right side of the line.

    Veber's rule uses PSA, and it is a rat-bioavailability rule. From oral bioavailability data on over 1,100 drug candidates in rats, Veber et al. found that compounds with 10 or fewer rotatable bonds and a polar surface area of 140 Ų or less (or 12 or fewer H-bond donors and acceptors combined) had a high probability of good oral bioavailability, and that the molecular weight cutoff of 500 did not by itself separate poor from acceptable compounds in their data (Veber et al., J. Med. Chem. 2002). The same paper found that reduced polar surface area correlated better with artificial-membrane permeation than CLogP did.

    Treat rule-of-five and Veber outcomes as triage flags on a population, which is how they were derived. They do not predict whether a single compound will be absorbed.

    Aqueous Solubility: Where Descriptors Run Out#

    The measurement is harder than it looks#

    Solubility data are noisier than logP data. AqSolDB merged nine public aqueous-solubility datasets into 9,982 unique compounds. Where sources disagreed, it selected the most reliable value and assigned each compound a reliability group from G1 to G5. It also cites reports of standard deviations as large as 0.5 log S units between experimental values for the same compound (Sorkun et al., Scientific Data 2019). Llinàs et al. described "serious deficiencies" in the consistency of literature solubility data. They measured intrinsic solubility for 100 drug-like molecules at 25 °C with the potentiometric CheqSol method and rejected any result with a coefficient of variation above 4% (Llinàs et al., J. Chem. Inf. Model. 2008). For a regulatory value, the reference method is OECD Test Guideline 105 (OECD TG 105, 1995).

    If your measured values carry half a log unit of inter-laboratory scatter, no calculated property will match them more closely than that.

    What descriptor models achieve#

    Two classic models show both the reach and the limit.

    ESOL regresses log solubility on descriptors computable from a 2D structure. It was fitted to 2,874 measured solubilities using nine molecular properties. Calculated logP was the most significant term, followed by molecular weight, the proportion of heavy atoms in aromatic systems, and the number of rotatable bonds. Across three validation sets it predicted solubilities within a factor of 5–8 of the measured values (Delaney 2004). A factor of 5–8 is roughly 0.7–0.9 log units, enough to separate a brick from a soluble compound and not enough to set a dose.

    The General Solubility Equation (GSE) uses only two inputs, the melting point and the octanol/water partition coefficient, and has no fitted parameters. On 150 organic non-electrolytes its average absolute error was 0.43 log units, against 0.56 for a five-parameter computational method on the same set (Ran & Yalkowsky, J. Chem. Inf. Comput. Sci. 2001).

    The difference between the two is the point of this section. The GSE is better, and it is better because it uses the melting point, which carries information about crystal packing that no 2D descriptor has. Lipinski et al. make the same point from the development side: exact solubility prediction is difficult "because of polymorphism", and useful predictions are possible in closely related analogue series when paired with experimental thermodynamic measurements (Lipinski et al. 200100129-0)).

    What that means in practice:

    • Calculated logP was ESOL's most significant term, so logP error flows straight into any solubility estimate built on it.
    • Melting point, salt form and polymorph are invisible to a SMILES. Two polymorphs of one molecule have identical descriptors and different solubilities.
    • Kinetic and thermodynamic solubility are different measurements. A turbidimetric screening value is not the equilibrium value a model was trained on.

    When to Use Each#

    Use calculated descriptors when#

    • You are ranking or filtering a library. Crippen logP is noisy on any single compound, and a coarse sort or a loose gate tolerates that noise better than a single-compound decision does. On large, drug-like libraries, check even the sort against a few measurements, because the industrial benchmark above found that most methods failed to beat the library mean on at least one dataset.
    • You are applying a published gate, such as the rule of five, Veber, or an internal MW/logP/TPSA window, as long as the descriptor convention matches the one the gate was set with.
    • You need a reproducible number to compare designs. The same SMILES and the same RDKit version always return the same value, which makes the descriptor a stable axis for design-to-design comparisons within a series.
    • You need inputs for a model. ESOL-style regressions and most learned ADMET models consume these descriptors.

    Measure when#

    • The decision depends on the value itself: formulation, dose projection, a go/no-go on a lead, or a regulatory submission.
    • The compound is ionisable at the pH that matters. Measure logD, not logP.
    • The compound is outside the models' comfort zone: large, flexible, macrocyclic, highly aromatic, or electronically unusual. Both the additive-model critique and the size trend in the industrial benchmark point the same way.
    • Solid form matters. Any solubility question about a specific salt or polymorph is a measurement question.

    Use both when#

    Calibrate before you trust. Measure logP or solubility for a handful of compounds in your series, compare them with the calculated values, and keep using the calculation only if it tracks the measurements. Lipinski's own recommendation for solubility is exactly this: prediction coupled with thermodynamic measurement inside an analogue series.

    Limitations to Keep in View#

    • Training statistics are not prospective error. The Wildman–Crippen r² and σ describe the fit to 9,920 training molecules. Blind benchmarks are the honest number, and they are worse.
    • Small benchmarks flatter. Eleven compounds over a narrow logP range cannot show you the tail. The large industrial comparison is the better guide to what happens on a real library.
    • One structure, several species. Tautomers, protonation states and salts change measured values, and a SMILES fixes one of them. Standardise input structures consistently before you compare descriptors across sources.
    • Descriptor conventions drift. TPSA with and without S and P, H-bond acceptor definitions and RDKit version changes all move the numbers. Record the toolkit version with the values.
    • Measured data have error bars too. Before you grade a model against one, check the assay, the pH, the temperature and whether the value is kinetic or thermodynamic.

    How to Run It on .bloom*#

    rdkit_full takes one SMILES or a list of them and returns calculated properties and filter outcomes. It does not return measured logP, logD or solubility, and it does not compute ESOL, the GSE, pKa or logD. Learned ADMET endpoints are a separate question, covered in A Practical Guide to ADMET Prediction.

    The operations this article relies on:

    OperationWhat it computes
    descriptorsThe druglike set (default): MolWt, MolLogP, NumHDonors, NumHAcceptors, NumRotatableBonds, TPSA, NumHeteroatoms, NumAromaticRings, NumAliphaticRings, RingCount, FractionCSP3, NumRadicalElectrons, NumValenceElectrons. Set descriptor_set to all for the full RDKit descriptor list, which includes MolMR.
    filterLipinski (more than one violation fails; Crippen logP > 5 counts as a violation) and Veber (≤ 10 rotatable bonds and TPSA ≤ 140 Ų), PAINS, Brenk and NIH structural alerts, and numeric bounds on MW, logP, TPSA, H-bond donors and acceptors, rotatable bonds and ring count.
    standardizeCanonicalise and standardise input SMILES before you compare values across sources.

    The job also runs fingerprints, similarity, substructure_search, murcko_scaffold and conformers_3d. Those are outside the scope of this article.

    MolLogP here is the Wildman–Crippen value and TPSA is the N-and-O convention described above, so the Lipinski and Veber checks inherit both conventions. If your gate was derived with CLogP or with S and P included, set explicit logp_max and tpsa_max bounds rather than relying on the named rules.

    Where it runs. Lightweight 2D work, including descriptors and filters on modest batches, can complete inline in the chat's sandbox. Larger batches, 3D conformers and CSV or SDF exports run as an rdkit_full CPU job. rdkit_full is a free-tier tool. Inputs, presets and copy-paste examples are in the RDKit quickstart, the descriptor reference is in Descriptors & Property Checks, and the routing detail is on the RDKit overview.

    What comes back: a descriptor value per molecule, a pass/fail result per molecule with the criteria it failed, and a CSV export when you request one. Ivy can chain the output into the next step, for example filtering on the descriptors before a heavier job runs on the survivors. Every value is a calculation, so the right next step for a shortlisted compound is a measured logD and a thermodynamic solubility.

    For the wider open-source toolchain around RDKit, see Open-Source Tools for Computational Drug Discovery.

    Key Takeaways#

    • RDKit's MolLogP is Wildman–Crippen, an additive sum of 68 atom-type contributions. Its fit statistics (r² 0.918, σ 0.677) are training-set numbers.
    • Blind error is about half a log unit on small neutral molecules, as in SAMPL6, where MOE's SlogP scored an RMSE of 0.55. Accuracy falls as molecules grow, and only 7 of 18 methods beat a predict-the-mean baseline on both industrial sets in the Mannhold comparison.
    • logP is not logD. For ionisable compounds, the pKa gap is a separate error that no logP model corrects.
    • TPSA is a definition, not a measurement. It is an excellent surrogate for 3D PSA (r = 0.99), and RDKit excludes S and P by default.
    • Rule thresholds carry their calculator. Lipinski's logP 5 was set on CLogP (or 4.15 on MLogP), not on Crippen.
    • Solubility needs the solid. Descriptor-only ESOL lands within a factor of 5–8. The GSE does better because it adds the melting point, and polymorphs are invisible to any SMILES.

    Rank with the calculation, gate with the convention written down, and measure what the decision depends on. Then compute the descriptors and apply the filters, on your own SMILES with the descriptor set recorded, on the .bloom* platform.

    References#

    1. Wildman, S.A. & Crippen, G.M. "Prediction of Physicochemical Parameters by Atomic Contributions." Journal of Chemical Information and Computer Sciences 39, 868–873 (1999). doi:10.1021/ci990307l · code: rdkit/rdkit
    2. Ertl, P., Rohde, B. & Selzer, P. "Fast Calculation of Molecular Polar Surface Area as a Sum of Fragment-Based Contributions and Its Application to the Prediction of Drug Transport Properties." Journal of Medicinal Chemistry 43, 3714–3717 (2000). doi:10.1021/jm000942e
    3. Işık, M., Bergazin, T.D., Fox, T. et al. "Assessing the accuracy of octanol–water partition coefficient predictions in the SAMPL6 Part II log P Challenge." Journal of Computer-Aided Molecular Design 34, 335–370 (2020). doi:10.1007/s10822-020-00295-0
    4. Mannhold, R., Poda, G.I., Ostermann, C. et al. "Calculation of Molecular Lipophilicity: State-of-the-Art and Comparison of LogP Methods on more than 96,000 Compounds." Journal of Pharmaceutical Sciences 98, 861–893 (2009). doi:10.1002/jps.21494
    5. Lipinski, C.A., Lombardo, F., Dominy, B.W. & Feeney, P.J. "Experimental and computational approaches to estimate solubility and permeability in drug discovery and development settings." Advanced Drug Delivery Reviews 46, 3–26 (2001). doi:10.1016/S0169-409X(00)00129-000129-0)
    6. Veber, D.F., Johnson, S.R., Cheng, H.-Y. et al. "Molecular Properties That Influence the Oral Bioavailability of Drug Candidates." Journal of Medicinal Chemistry 45, 2615–2623 (2002). doi:10.1021/jm020017n
    7. Sorkun, M.C., Khetan, A. & Er, S. "AqSolDB, a curated reference set of aqueous solubility and 2D descriptors for a diverse set of compounds." Scientific Data 6, 143 (2019). doi:10.1038/s41597-019-0151-1
    8. Delaney, J.S. "ESOL: Estimating Aqueous Solubility Directly from Molecular Structure." Journal of Chemical Information and Computer Sciences 44, 1000–1005 (2004). doi:10.1021/ci034243x
    9. Ran, Y. & Yalkowsky, S.H. "Prediction of Drug Solubility by the General Solubility Equation (GSE)." Journal of Chemical Information and Computer Sciences 41, 354–357 (2001). doi:10.1021/ci000338c
    10. Llinàs, A., Glen, R.C. & Goodman, J.M. "Solubility Challenge: Can You Predict Solubilities of 32 Molecules Using a Database of 100 Reliable Measurements?" Journal of Chemical Information and Modeling 48, 1289–1303 (2008). doi:10.1021/ci800058v
    11. OECD. "Test No. 107: Partition Coefficient (n-octanol/water): Shake Flask Method." OECD Guidelines for the Testing of Chemicals, Section 1 (1995). doi:10.1787/9789264069626-en
    12. OECD. "Test No. 117: Partition Coefficient (n-octanol/water), HPLC Method." OECD Guidelines for the Testing of Chemicals, Section 1 (2022). doi:10.1787/9789264069824-en
    13. OECD. "Test No. 105: Water Solubility." OECD Guidelines for the Testing of Chemicals, Section 1 (1995). doi:10.1787/9789264069589-en

    Frequently asked

    How accurate is RDKit's calculated logP?

    Expect roughly half a log unit on small, neutral, drug-like molecules, and worse as molecules get larger. RDKit's MolLogP implements the Wildman–Crippen atom-contribution model, which fit 68 atomic contributions to 9,920 molecules with r² = 0.918 and a standard deviation of 0.677 log units (J. Chem. Inf. Comput. Sci. 1999). Those are training-set statistics. In the blind SAMPL6 logP challenge, MOE's SlogP, another implementation of the same model, scored an RMSE of 0.55 on 11 compounds. A 96,000-compound comparison found that accuracy of logP methods declines as the number of non-hydrogen atoms grows.

    Is calculated logP the same as shake-flask logP?

    No. Shake-flask logP (OECD Test Guideline 107) is a measured equilibrium partition of the neutral compound between n-octanol and water. Crippen logP is a sum of tabulated atom contributions. The two agree on average and disagree for individual compounds, most of all for large molecules, complex aromatic systems and strong electronic effects. Calculated logP also describes only the neutral species, so it is not logD at pH 7.4 for an ionisable drug.

    Can RDKit descriptors predict aqueous solubility?

    Only roughly, because solubility depends on the crystal as well as the molecule. Delaney's ESOL regression on calculated logP, molecular weight, aromatic proportion and rotatable bonds predicted solubilities within a factor of 5–8 of measured values. The General Solubility Equation reached an average absolute error of 0.43 log units on 150 compounds, but it needs the melting point, which no 2D descriptor provides. Use calculated properties to rank compounds, and measure solubility before any decision that depends on it.

    Why does RDKit give a TPSA of 0 for thiophene?

    Because RDKit's TPSA counts only nitrogen and oxygen by default. The original Ertl paper also tabulated sulfur and phosphorus contributions, but RDKit follows the Daylight implementation, which leaves them out. With includeSandP=True, thiophene's TPSA is 28.24 Ų. Check which convention a published threshold such as Veber's 140 Ų assumed before you apply it.

    Which RDKit descriptor operations run on .bloom*?

    The rdkit_full job computes descriptors from SMILES using the druglike set (MolWt, MolLogP, TPSA, H-bond donors and acceptors, rotatable bonds, ring counts, FractionCSP3 and more) or the full RDKit descriptor list. It also applies Lipinski, Veber, PAINS, Brenk and NIH filters and numeric bounds on MW, logP, TPSA, H-bond counts, rotatable bonds and rings, and runs standardisation, fingerprints, Murcko scaffolds, similarity, substructure search and 3D conformers. It returns calculated values, not measured logP, logD or solubility.


    tags

    • RDKit
    • logP
    • aqueous solubility
    • TPSA
    • physicochemical properties
    • drug-likeness
    • cheminformatics

    about the author

    Ivy Biosciences

    The Ivy Biosciences team builds AI tools for computational drug discovery.

    Loading...