-
Notifications
You must be signed in to change notification settings - Fork 0
Units and organic matter
Pedotri's public functions all take percentages by default — sand, silt, clay, organic matter as numbers in [0, 100]. Real-world lab reports almost never come in that form. This page lists the conversions you'll actually need and shows how to plug them in.
| Convention | Range | Where you see it |
|---|---|---|
| percent | 0-100 | Most US / international literature; pedotri default |
| g/kg | 0-1000 | European labs, especially for organic matter and exchangeable cations |
| g/g (mass fraction) | 0-1 | Modelling pipelines, internal MD scripts |
| % w/w | 0-100 | Synonym for "percent"; nothing special |
| % OC vs % OM | 0-100 | PTFs want organic matter; labs report organic carbon |
Four public functions accept a units= keyword that converts at the
boundary:
import pedotri
# Same soil, three conventions, identical answer
pedotri.classify(60, 20, "USDA") # default %
pedotri.classify(600, 200, "USDA", units="g/kg") # g/kg
pedotri.classify(0.60, 0.20, "USDA", units="g/g") # mass fractionThe same keyword works on:
pedotri.classifypedotri.ptf.saxton_rawlspedotri.ptf.wostenpedotri.psd.convert
When you mix sand/clay in one unit and organic matter in another,
convert by hand using the pedotri.units helpers (next section). The
units= keyword applies uniformly to all fraction arguments.
The Van Bemmelen factor 1.724 assumes organic matter is ~58 % carbon by mass:
OM = OC × 1.724
OC = OM / 1.724
from pedotri.units import organic_carbon_to_organic_matter
oc_pct = 1.16 # % organic carbon from lab
om_pct = float(organic_carbon_to_organic_matter(oc_pct)[0])
print(om_pct) # ~2.0The 1.724 default works for typical agricultural mineral soils. For specific contexts, consider:
| Factor | Source | When to use |
|---|---|---|
| 1.724 | Van Bemmelen 1890 (default) | Generic mineral agricultural soils |
| 1.9 | Pribyl 2010 | Less-decomposed organic material, surface horizons |
| 2.0 | Various forest-soil studies | Forest litter, O horizons |
om_forest = float(organic_carbon_to_organic_matter(oc_pct, factor=2.0)[0])Trivial but everyone gets it wrong eventually:
from pedotri.units import g_per_kg_to_percent, percent_to_g_per_kg
g_per_kg_to_percent(20) # → array([2.0])
percent_to_g_per_kg(2) # → array([20.0])Lab gives you (in their preferred units):
sand: 420 g/kg
silt: 380 g/kg
clay: 200 g/kg
OC: 11.5 g/kg
BD: 1.42 g/cm³
Classify with USDA and run Saxton-Rawls:
import pedotri
from pedotri.ptf import saxton_rawls
from pedotri.units import g_per_kg_to_percent, organic_carbon_to_organic_matter
sand_pct = float(g_per_kg_to_percent(420)[0]) # 42.0
clay_pct = float(g_per_kg_to_percent(200)[0]) # 20.0
oc_pct = float(g_per_kg_to_percent(11.5)[0]) # 1.15
om_pct = float(organic_carbon_to_organic_matter(oc_pct)[0]) # ~1.98
print(pedotri.classify(sand_pct, clay_pct, "USDA"))
# 'loam'
r = saxton_rawls(sand=sand_pct, clay=clay_pct, organic_matter=om_pct)
print(r.field_capacity, r.wilting_point, r.available_water)Or, equivalently, push the conversion to the units= boundary and
convert OC→OM upstream:
om_g_per_kg = 11.5 * 1.724
pedotri.classify(420, 200, "USDA", units="g/kg")
saxton_rawls(sand=420, clay=200, organic_matter=om_g_per_kg, units="g/kg")- "Texture index" is not a unit; it's the output of a classification.
-
"% < 2 µm" = clay; "% < 50 µm" = silt + clay (USDA). Don't
hand pedotri a "% < 50 µm" number as
silt— it's not silt. - "Mechanical analysis" = a sand/silt/clay PSD, but the cutoffs depend on the country; see Soil-conversions.
- EC, pH, CEC are not pedotri inputs at all; the library is texture-and-OM only at the moment.
- API docs:
pedotri.units - Pedotransfer-functions — PTFs expect OM, not OC
-
Soil-conversions — converts triples between standards, with the same
units=keyword
Concepts
- Classifications & when to use them
- Classification-challenges
- Uncertainty-aware classification
- Regional aggregation & SOC stock
- Reprojection & target grids
- Spatial correlation
- DEM-derived indices
- Soil-conversions
- Pedotransfer-functions
- Units-and-organic-matter
Compliance
Use cases
- Examples-gallery
- GeoTIFF-and-SoilGrids
- Map-products-and-field-sampling
- Benchmark-vs-soiltexture
- Custom-classifications-in-practice
Development
External