PyHelios uses a sophisticated plugin architecture with 21 available plugins that can be selectively built and deployed based on your hardware and requirements.
Plugin Categories
Core Plugins (Always Available)
- weberpenntree: Procedural tree generation using Weber-Penn algorithms
- canopygenerator: Plant canopy generation for various species
- solarposition: Solar position calculations and sun angle modeling
GPU-Accelerated Plugins (Require CUDA)
- radiation: OptiX-accelerated ray tracing and radiation modeling
- aeriallidar: Aerial LiDAR simulation with GPU acceleration
- collisiondetection: Collision detection with optional GPU acceleration
Physics Modeling Plugins
- energybalance: Plant energy balance calculations and thermal modeling
- photosynthesis: Photosynthesis modeling and carbon assimilation
- leafoptics: Leaf optical properties modeling (PROSPECT model)
- stomatalconductance: Stomatal conductance modeling and gas exchange
- boundarylayerconductance: Boundary layer conductance for heat/mass transfer
- planthydraulics: Plant hydraulic modeling and water transport
Analysis and Simulation Plugins
- lidar: LiDAR simulation and point cloud processing
- plantarchitecture: Advanced plant structure and architecture modeling
- voxelintersection: Voxel intersection operations and spatial analysis
- syntheticannotation: Synthetic data annotation for machine learning
- parameteroptimization: Parameter optimization algorithms for model calibration
Visualization and Tools
- visualizer: OpenGL-based 3D visualization and rendering
- projectbuilder: GUI project builder with ImGui interface
Plugin Selection Profiles
Use predefined profiles for common use cases:
# Default build (core functionality with visualization)
build_scripts/build_helios
# Specific plugin selection
build_scripts/build_helios --plugins weberpenntree,canopygenerator,visualizer
# Build with all plugins (includes GPU features if CUDA available)
build_scripts/build_helios
# Or build specific plugins
build_scripts/build_helios --plugins radiation
# Interactive selection (guided setup)
build_scripts/build_helios --interactive
# Exclude specific categories
build_scripts/build_helios --nogpu --novis
Profile Contents
Profile | Plugins Included | Use Case |
minimal | weberpenntree, canopygenerator, solarposition | Basic functionality |
standard | minimal + energybalance, photosynthesis, visualizer | General usage |
gpu-accelerated | standard + radiation | High-performance computing |
research | Most plugins | Academic research |
production | Reliable subset | Production deployments |
Runtime Plugin Detection
PyHelios automatically detects available plugins at runtime:
from pyhelios import Context
context = Context()
available_plugins = context.get_available_plugins()
print(f"Available plugins: {available_plugins}")
registry = get_plugin_registry()
if registry.is_plugin_available('radiation'):
print("GPU radiation modeling available")
else:
print("Radiation plugin not available - build with CUDA support enabled")
print_plugin_status()
Plugin-Aware Usage
Graceful Degradation
from pyhelios import Context, RadiationModel
context = Context()
try:
with RadiationModel(context) as radiation:
radiation.add_radiation_band("SW")
radiation.run_band("SW")
results = radiation.get_total_absorbed_flux()
except HeliosPluginNotAvailableError as e:
print(f"Radiation modeling not available: {e}")
Plugin Registry
from pyhelios.plugins.registry import get_plugin_registry
registry = get_plugin_registry()
capabilities = registry.get_plugin_capabilities()
for plugin, info in capabilities.items():
print(f"{plugin}: {info['description']}")
if info['gpu_required']:
print(" Requires GPU support")
missing = registry.get_missing_plugins(['radiation', 'visualizer'])
if missing:
print(f"Missing plugins: {missing}")
Custom Plugin Selection
Explicit Plugin Selection
# Build with specific plugins
build_scripts/build_helios --plugins weberpenntree,canopygenerator,visualizer,energybalance
# Interactive selection (guided setup)
build_scripts/build_helios --interactive
# Exclude problematic plugins
build_scripts/build_helios --exclude radiation
Configuration File Support
Create pyhelios_config.yaml
for persistent preferences:
plugins:
selection_mode: "profile"
profile: "standard"
excluded_plugins:
- radiation # Exclude if no GPU available
build:
build_type: "Release"
verbose: false
Discovery and Validation
# Discover optimal configuration for your system
python -m pyhelios.plugins discover
# Check plugin status and availability
python -m pyhelios.plugins status
# Get information about specific plugins
python -m pyhelios.plugins info radiation
# Validate plugin combinations
python -m pyhelios.plugins validate --plugins radiation,visualizer
# List all available profiles
python -m pyhelios.plugins profiles
Plugin Development
Adding New Plugins
For developers looking to add new plugins:
- C++ Plugin Development: See C++ Plugin Integration Guide
- Python Wrapper: Create ctypes wrapper in
pyhelios/wrappers/
- High-Level Interface: Add user-friendly class in
pyhelios/
- Plugin Metadata: Update
pyhelios/config/plugin_metadata.py
- Testing: Add tests with appropriate markers
Plugin Architecture
from pyhelios.wrappers.base import BaseWrapper
from pyhelios.plugins.decorators import require_plugin
class MyPluginWrapper(BaseWrapper):
@require_plugin('myplugin')
def my_function(self, param):
"""Function that requires the myplugin plugin."""
return self._call_native('my_function', param)
class MyPlugin:
def __init__(self, context):
self.context = context
self.wrapper = MyPluginWrapper()
@require_plugin('myplugin')
def do_something(self):
"""High-level interface to plugin functionality."""
return self.wrapper.my_function()
Plugin Dependencies
System Dependencies
Plugins may require system libraries:
- radiation: CUDA Toolkit, OptiX SDK
- visualizer: OpenGL, GLFW
- lidar: Point cloud libraries
- photosynthesis: Mathematical libraries
Dependency Resolution
from pyhelios.config.dependency_resolver import PluginDependencyResolver
resolver = PluginDependencyResolver()
result = resolver.resolve_dependencies(['radiation', 'visualizer'])
if result.errors:
for error in result.errors:
print(f"Error: {error}")
else:
print(f"Final plugins: {result.final_plugins}")
Performance Considerations
Plugin Loading
- Plugins are loaded dynamically at runtime
- Only active plugins consume memory
- GPU plugins initialize hardware on first use
Memory Management
context.cleanup_plugins()
with Context() as context:
pass
Troubleshooting
Common Plugin Issues
Plugin Not Found:
GPU Plugin Failures:
# Check CUDA installation
nvidia-smi
# Verify OptiX availability
python -c "from pyhelios.plugins import check_optix; check_optix()"
Dependency Issues:
# Check system dependencies
python -m pyhelios.plugins validate --system-check
Plugin Error Messages
PyHelios provides detailed error messages with actionable solutions:
HeliosPluginNotAvailableError: The 'radiation' plugin is not available.
To enable GPU-accelerated radiation modeling:
1. Install CUDA Toolkit 11.0+
2. Rebuild PyHelios with CUDA: build_scripts/build_helios
3. Ensure NVIDIA GPU with compute capability 3.5+
Alternative: Use CPU-based radiation approximations with the 'energybalance' plugin.