Skip to main content

Leaf and canopy radiative transfer modeling tools built on PROSPECT-D and SAIL

Project description

xleaf

Canopy reflectance simulated in rainbows.

Leaf and canopy radiative transfer modeling tools built on PROSPECT-D and SAIL.


Introduction

🌳 xleaf is a python package for running leaf and canopy simulation models using PROSAIL. It provides python bindings to the PROSPECT-D & 4SAIL Fortran code.

🌿 It includes sensible defaults that make it easy to get up and running quickly, and clear code documentation in the form of docstrings and type hints.

📚 All credit for the fundamental modeling code and for the underlying science belongs to the original researchers. xleaf is mostly a wrapper. Please cite their most recent research:

@article{feret2017prospect,
  title={PROSPECT-D: Towards modeling leaf optical properties through a complete lifecycle},
  author={Feret, J-B and Gitelson, AA and Noble, SD and Jacquemoud, S},
  journal={Remote Sensing of Environment},
  volume={193},
  pages={204--215},
  year={2017},
  publisher={Elsevier}
}

🧙 Shout out to my man JB.


Install

pip install xleaf

🖥️ Depending on your OS, you may need a FORTRAN compiler. So on ubuntu you could run sudo apt install gcc. On macos you'd run brew install gcc.


Leaf and canopy simulations

import xleaf
import matplotlib.pyplot as plt

# run with off-the-shelf defaults
leaf = xleaf.simulate_leaf()

# or specify detailed parameters
canopy = xleaf.simulate_canopy(
    chl = 40, # ug/cm2
    car = 8, # ug/cm2
    antho = 0.5, # ug/cm2
    ewt = 0.01, # cm
    lma = 0.009, # g/cm2
    N = 1.5, # unitless
    lai = 3.0, # m2/m2
    lidf = 30, # degrees
    soil_dryness = 0.75, # %
    solar_zenith = 35, # degrees
    solar_azimuth = 120, # degrees
    view_zenith = 0, # degrees
    view_azimuth = 60, # degrees
    hot_spot = 0.01, # unitless
)

# and plot them together
plt.plot(xleaf.wavelengths, leaf, label='leaf')
plt.plot(xleaf.wavelengths, canopy, label='canopy')
plt.legend()

📄 The definitions and expected range of values for each parameter are described in the xleaf docstrings.


Random forests

📊 xleaf provides classes for generating random parameters within the global range of expected values. These classes have a .sample() method for generating an appropriate random value based on a literature review.

import xleaf
import matplotlib.pyplot as plt

# generate 5 random leaf spectra from global defaults
for idx in range(5):
    chl = xleaf.ChlorophyllSampler.sample()
    car = xleaf.CarotenoidSampler.sample()
    antho = xleaf.AnthocyaninSampler.sample()
    ewt = xleaf.EWTSampler.sample()
    lma = xleaf.LMASampler.sample()
    N = xleaf.NSampler.sample()
    leaf = xleaf.simulate_leaf(chl, car, antho, ewt, lma, N)
    plt.plot(xleaf.wavelengths, leaf, label=f"leaf {idx+1}")

plt.legend()

🧪 Or experiment by setting the range of values yourself:

import xleaf
import matplotlib.pyplot as plt

MyLAISampler = xleaf.UniformSampler(min=2, max=6)
MyVZASampler = xleaf.NormalSampler(mean=0, stdv=3, min=-10, max=10)

# generate 5 random canopy spectra just varying LAI/VZA
for idx in range(5):
    lai = MyLAISampler.sample()
    vza = MyVZASampler.sample()
    canopy = xleaf.simulate_canopy(lai=lai, view_zenith=vza)
    plt.plot(xleaf.wavelengths, canopy, label=f"lai: {lai:0.2f}, vza: {vza:0.2f}")

plt.legend()

⚡ These parameters don't always vary independently. Try to exercise caution when constructing parameter estimates to ensure biological realism.


Developed by

Christopher Anderson[^1] [^2]

Twitter Follow GitHub Stars

[^1]: Planet Labs PBC, San Francisco [^2]: Center for Conservation Biology, Stanford University

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xleaf-1.0.0.tar.gz (69.4 kB view details)

Uploaded Source

Built Distribution

xleaf-1.0.0-cp39-cp39-macosx_11_0_arm64.whl (151.3 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

File details

Details for the file xleaf-1.0.0.tar.gz.

File metadata

  • Download URL: xleaf-1.0.0.tar.gz
  • Upload date:
  • Size: 69.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for xleaf-1.0.0.tar.gz
Algorithm Hash digest
SHA256 268ff83b83f1f218e7d25ad9252b2bc5e1a11be8eb247b3f24527bb00fbc9c06
MD5 ff2ed20bb31eacc5433c1ed3d7a6837c
BLAKE2b-256 b213f8e0a18ffdb106545a1fb0429ca4d7f15aac4f9e610fbf5f7451e84594ac

See more details on using hashes here.

File details

Details for the file xleaf-1.0.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for xleaf-1.0.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e0262c9ab4e4f498529c118dbbeaf0ca1cce2491cccaaa79fc1b40410009f195
MD5 a9c512ad64225a8fe4fc50165eb9d632
BLAKE2b-256 9490a9a742b15022d42d105966b461a40a10d32cf9704d2adcd344ff94567346

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page