Quick Start
5-Minute Quick Start
Import and use mpspline in just a few lines:
from mpspline import mpspline
# Define a single soil profile
profile = {
'horizons': [
{'hzname': 'A', 'upper': 0, 'lower': 20, 'clay': 24.5},
{'hzname': 'B', 'upper': 20, 'lower': 50, 'clay': 35.2},
]
}
# Harmonize to standard depths
result = mpspline(profile, var_name=['clay'])
# Access harmonized values
print(result['clay_0_5']) # Clay % at 0-5 cm
print(result['clay_5_15']) # Clay % at 5-15 cm
print(result['clay_15_30']) # Clay % at 15-30 cm
Single Profile Processing
Process a single profile and get a dictionary with harmonized values:
from mpspline import mpspline
component = {
'cokey': 12345,
'compname': 'Miami',
'horizons': [
{
'hzname': 'Ap',
'upper': 0,
'lower': 20,
'clay': 24.5,
'sand': 42.3,
'silt': 33.2,
},
{
'hzname': 'Bt',
'upper': 20,
'lower': 50,
'clay': 35.2,
'sand': 28.1,
'silt': 36.7,
},
]
}
# Harmonize clay, sand, silt to GlobalSoilMap depths
result = mpspline(component, var_name=['clay', 'sand', 'silt'])
# Result includes original metadata + harmonized values
print(result['cokey']) # 12345 (preserved)
print(result['compname']) # 'Miami' (preserved)
print(result['clay_0_5']) # Harmonized clay at 0-5 cm
print(result['sand_5_15']) # Harmonized sand at 5-15 cm
Batch Processing
Process multiple profiles efficiently:
from mpspline import mpspline
import pandas as pd
profiles = [
{
'cokey': 1,
'horizons': [
{'upper': 0, 'lower': 20, 'clay': 20},
{'upper': 20, 'lower': 50, 'clay': 30},
]
},
{
'cokey': 2,
'horizons': [
{'upper': 0, 'lower': 15, 'clay': 22},
{'upper': 15, 'lower': 45, 'clay': 32},
]
},
]
# Returns a pandas DataFrame
df = mpspline(profiles, var_name=['clay'])
print(df)
# cokey clay_0_5 clay_5_15 clay_15_30 ...
# 0 1 20.50 20.75 24.50 ...
# 1 2 22.00 21.50 26.50 ...
Default Depth Intervals
By default, mpspline uses GlobalSoilMap standard depths:
0-5 cm (topsoil/organic interface)
5-15 cm (topsoil)
15-30 cm (upper subsoil)
30-60 cm (mid-subsoil)
60-100 cm (deep subsoil)
100-200 cm (very deep/C-horizon)
Custom depths are also supported (see Parameters).
Horizon Input Format
Each horizon should contain:
Top depth (required): Can be named upper, top, start, depth_min, or hzdept_r
Bottom depth (required): Can be named lower, bottom, end, depth_max, or hzdepb_r
Horizon name (optional): Can be named hzname, name, or label
Properties (required): Any numeric fields to harmonize (clay, sand, silt, etc.)
Example:
horizon = {
'hzname': 'Ap', # Optional
'upper': 0, # Required (depth to top)
'lower': 20, # Required (depth to bottom)
'clay': 24.5, # Property 1
'sand': 42.3, # Property 2
'silt': 33.2, # Property 3
}
Next Steps
Parameters: Learn about tuning lambda, constraints, and more - see Parameters
Performance: Speed up large processing jobs - see Performance Optimization
Troubleshooting: Common issues and solutions - see Troubleshooting & FAQ
Examples: More detailed examples in the examples/ directory
API Reference: Full function documentation - see API Reference