Beginner perfumer · 104
320 logP values fall outside the physically plausible range, and 319 of them are right
· 13 min read
I have been catching errors with range checks — purity cannot exceed 100, refractive index cannot fall below 1. Applying the same method to logP fails almost completely. 320 records fall outside −5 to +15, the extremes being inulin at −70.20 and sucrose hexastearate at 48.90, and both are correct: those are polysaccharides and lipids with molecular weights over a thousand, where extreme logP is real. There is exactly one genuine error — strychnine's logP reads 389.00 against a molecular weight of 334. Every other extreme comes with a molecular weight above 1,200. But those 320 records turned out to be useful for something else: only 0.9% of them have an odour type, against 19.2% for records inside the range. An out-of-range logP is not an error flag. It is a 'this is not an aroma material' flag, and it is 21 times more accurate at that.
About a 4 minute read.
I wrote about three checks that need no chemistry, one of which is the range check: purity cannot exceed 100%, refractive index cannot fall below 1.
This article applies the same method to logP, and it fails almost completely.
The field first
logp (the octanol–water partition coefficient) has 19,667 values (46.6%).
And 19,604 of them carry "(est)" — 99.7%.
That is the highest estimate share of any field I have measured (against vapour pressure's 94.0% and flash point's 56.6%). Only 63 records carry a measured value.
And there is an xlogp3 field beside it. Of the 18,450 records with both, only 32 (0.2%) differ by more than 0.5.
They are essentially the same number in two fields.
The range check fails
Organic molecules' logP usually falls between −3 and +12. Pulling everything outside −5 to +15 gives 320 records (1.63%).
And reading them, almost all are correct:
| logP | MW | Material |
|---|---|---|
| −70.20 | 6,179 | Inulin |
| −21.40 | — | Chitosan |
| −17.20 | 1,297 | γ-cyclodextrin |
| −7.40 | — | Hyaluronic acid |
| −6.90 | — | Maltodextrin |
| +15.60 | — | Lycopene |
| +19.40 | — | Ubidecarenone (CoQ10) |
| +42.20 | 1,426 | Pentaerythrityl tetrabehenate |
| +48.90 | 1,941 | Sucrose hexastearate |
Inulin is a polysaccharide of molecular weight six thousand; a logP around −70 is what it should have. Sucrose hexastearate is a lipid of nearly two thousand, and +48.9 is right too.
My "plausible range" was a fragrance chemist's intuition applied to a database full of cosmetic ingredients. The range is right for aroma materials and wrong for these.
Exactly one is genuinely wrong
| logP | MW | Material |
|---|---|---|
| 389.00 | 334.4 | Strychnine |
Every other extreme has a molecular weight above 1,200. A molecule of 334 cannot have a logP of 389 — that would make it 10³⁸⁹ times more soluble in oil than in water.
What caught it was not the range check but the range cross-referenced against molecular weight.
This is a new kind of check: not "is this number plausible" but "does this number agree with another number on the same record." (All my earlier checks worked inside a single field.)
But those 320 records turned out to be useful
I was about to discard them, then checked one thing: how many of them have an odour type?
| Records | Has an odour type | Has an odour field | |
|---|---|---|---|
| logP outside −5..15 | 320 | 3 (0.9%) | 2 (0.6%) |
| logP inside −5..15 | 19,347 | 3,718 (19.2%) | 3,648 (18.9%) |
A factor of 21.
Their category fields say the same thing. The out-of-range group's most common categories are natural substances and extractives (113), information only not used for fragrances or flavors (45), emollients and skin conditioning (14), indirect food additives: adhesives and components of coatings (13), emollients and viscosity controlling (11).
An out-of-range logP is not a flag for "this record is wrong." It is a flag for "this is not an aroma material."
Which is exactly what I needed. This database holds forty thousand records, a large share of them cosmetic raw materials, thickeners and food additives — and logP provides a filter you can write in one line.
Incidentally: logP does not predict substantivity
While computing correlations, I compared a few:
| ρ | |
|---|---|
| Vapour pressure vs substantivity | −0.647 |
| logP vs molecular weight | 0.435 |
| logP vs vapour pressure | −0.355 |
| logP vs substantivity | 0.289 |
logP correlates with substantivity at only 0.289, far below vapour pressure's −0.647.
To know how long something lasts, read the vapour pressure, not the logP. (logP describes how a compound partitions between oil and water, which bears on how it lingers on skin — a different thing from how fast it evaporates off a blotter.)
In practice
- A range check requires asking whose range it is. My −5 to +15 was the range for aroma molecules, not for this database.
- Cross-field checks catch what single-field checks cannot. Strychnine only shows up when logP and molecular weight are read together.
logpandxlogp3are the same number. Do not treat them as two independent sources.- To filter out non-fragrance records,
logp NOT BETWEEN -5 AND 15is a cheap starting point.
What this doesn't establish
- 99.7% are estimates, so this whole article describes a model's output rather than measurements.
- "−5 to +15" is a fragrance range I chose by hand, not any standard; a different threshold changes those 320 records.
- I read only the dozen best-supplied and the eight most extreme records individually, not all 320 — so "319 of them are right" is extrapolation, not a count.
- I did not look up strychnine's correct logP (literature puts it near 1.9, but I cite no source). I can only say 389 cannot go with a molecular weight of 334.
- The 0.9% versus 19.2% gap may simply reflect those 320 records being sparse overall, rather than "not an aroma material, therefore no odour type." I cannot separate those.
- Each correlation uses the subset of records with both values, and coverage differs by field, so those ρ values are not computed on the same set of records.