L-SURF

User Guide

  • Installation
    • Prerequisites
      • NVIDIA GPU (Recommended)
      • Check Your System
      • Python Requirements
    • Dependencies
    • Installation Methods
      • Recommended: Conda Environment
      • Alternative: pip
    • GPU Setup
      • Option 1: System CUDA (Recommended)
      • Option 2: Conda CUDA
      • Verifying GPU Setup
      • Run a Quick Benchmark
    • Troubleshooting
      • CUDA Not Available
      • Conda Package Not Found
      • Out of GPU Memory
      • Slow Performance
      • Import Errors
    • Platform-Specific Notes
      • Windows
      • macOS
      • WSL2 (Windows Subsystem for Linux)
  • Quick Start
    • Full Simulation Pipeline
    • Simple Surface Interaction
    • Key Concepts
      • GeometryBuilder
      • SimulationConfig
      • Surface Roles
      • Surfaces
      • Materials
      • Ray Sources
      • Simulation Results
      • Logging
    • Next Steps
  • Examples
    • Example 01: Basic Raytracing
      • Overview
      • Key Concepts
        • Materials
        • Surfaces
        • Ray Generation
        • Surface Interaction
      • Expected Output
      • Physics Validation
      • Running the Example
      • Exercises
      • See Also
    • Example 06: Detector Scan (Planar Surface)
      • Overview
      • Geometry
      • Key Code Sections
        • Detector Scanning Loop
        • Timing Analysis
        • Visualization
      • Expected Output
      • Physics
        • Specular Reflection
        • Detection Efficiency
        • Time Spread
      • Running the Example
      • Exercises
      • See Also
    • Local Scale Ocean Wave Simulation
      • Overview
      • Key Features
      • Usage
      • Command-Line Arguments
      • Output Files
      • Example Output
      • Physics Background
      • See Also
    • Production Ocean Wave Simulation
      • Overview
      • Differences from Local Simulation
      • Usage
      • Command-Line Arguments
      • Output Files
      • Performance Considerations
      • Batch Processing
      • Data Analysis Workflow
      • Combining Multiple Runs
      • Common Production Scenarios
      • Troubleshooting
      • See Also
    • Example Overview
    • Running Examples
    • Output Files
    • Performance Notes
      • GPU vs CPU
      • Scaling
  • User Guide
    • Getting Started
      • Interacting with L-SURF
        • CLI and GUI: The Preferred Approach
        • Numbered Example Scripts
      • Understanding Materials and Media
        • What is a Medium?
        • Why Use Named Media?
        • Surface Material Assignment
        • The Background Medium
      • Material Checking and Validation
        • The Intersection Problem
        • When Validation Fails
        • When Validation Passes
        • Skipping Validation
        • Cell-Based Geometry (Advanced)
      • Using the “Check Geometry” Feature
      • Common Material Configurations
        • Air-Water Interface
        • Atmospheric Simulation
        • Glass Optics
      • Next Steps
    • Command Line Interface (CLI)
      • Overview
      • Getting Help
      • Building Configurations
        • Interactive Mode
        • Using Templates
        • Non-Interactive Mode
      • Running Simulations
        • Basic Usage
        • Validating Configurations
        • Overriding Parameters
        • Output Options
      • Configuration File Format
        • Media Types
        • Surface Types
        • Detector Types
        • Source Types
      • Output Formats
      • Typical Workflow
      • Tips and Best Practices
    • Graphical User Interface (GUI)
      • Launching the GUI
      • Interface Overview
      • Scene Tree Panel
      • Configuration Editor
        • Surfaces Tab
        • Detectors Tab
        • Source Tab
        • Simulation Tab
      • 3D Viewport
      • Visualizations Panel
      • Running Simulations
      • Loading and Saving
      • Typical Workflow
      • Tips
    • Simulation Workflow
      • Overview
      • Step 1: Define Materials
      • Step 2: Define Surfaces
        • Surface Roles
      • Step 3: Build Geometry
      • Step 4: Configure Simulation
        • Key Parameters
      • Step 5: Generate Rays
      • Step 6: Run Simulation
      • Step 7: Analyze Results
        • Detected Ray Data
      • Complete Example
      • Advanced Topics
        • GPU vs CPU Execution
        • Adaptive Stepping
        • Polarization
        • Surface Hit Tracking
    • Implementing Custom Materials
      • Overview
      • Module Structure
      • Homogeneous Materials
        • Basic Usage
        • Wavelength-Dependent Materials
        • Using Factory Functions
      • SimpleInhomogeneousModel
        • When to Use
        • Implementation
        • Optional: Analytical Gradient
        • Configuration Options
        • Complete Example
      • GridInhomogeneousModel
        • When to Use
        • Implementation
        • Subclassing for Reusability
        • Pre-computed Gradients
      • FullInhomogeneousModel
        • When to Use
        • Implementation
        • Optional: Analytical Gradient
      • Using Materials with Propagators
      • Testing Materials
        • Unit Tests
        • GPU Tests
        • Integration Tests
        • Running Tests
      • Adding to the Package
      • Best Practices
      • Example: Complete Custom Atmosphere
      • Atmospheric Duct Example
      • See Also
    • Physics Theory
      • Electromagnetic Wave Propagation
        • Light as Rays
        • Refractive Index
      • Fresnel Equations
        • Geometry
        • Snell’s Law
        • Fresnel Reflection Coefficients
        • Fresnel Transmission Coefficients
        • Unpolarized Light
        • Brewster’s Angle
      • Polarization Tracking
        • Polarization State
      • Multiple Scattering
        • Ray Splitting
        • Intensity Tracking
        • Termination Criteria
      • Time-of-Flight
        • Ray Timing
        • Temporal Coherence
        • Detection Time
      • Wave Surface Interaction
        • Normal Vector Calculation
        • Shadowing and Blocking
      • Implementation References
    • Algorithms
      • Ray-Surface Intersection
        • Overview
        • Ray Parametrization
        • Planar Surface Intersection
        • Spherical Surface Intersection
        • Wave Surface Intersection
      • Reflection Vector Calculation
        • Law of Reflection
      • Refraction Vector Calculation
        • Snell’s Law in Vector Form
      • Intensity and Amplitude Tracking
        • Ray Intensity Update
        • Polarization State Update
      • Multi-Bounce Ray Tracing
        • Algorithm Overview
        • Computational Complexity
      • Accuracy and Error Analysis
        • Floating Point Precision
        • Intersection Epsilon
        • Convergence Criteria
    • Wave Surface Modeling
      • Gerstner Waves
        • Overview
        • Mathematical Formulation
        • Physical Parameters
        • Multi-Component Waves
        • Surface Normal
      • Curved Earth Geometry
        • Spherical Coordinate System
        • Local Tangent Plane
        • CurvedWaveSurface Class
      • Wave Spectra
        • Realistic Ocean Spectra
        • Directional Spread
        • Sampling Wave Components
      • Time Evolution
        • Static vs Dynamic Waves
        • Wave Propagation
      • Computational Considerations
        • Memory Requirements
        • Computation Cost
      • Validation

API Reference

  • API Reference
    • Geometry Module
      • Overview
      • GeometryBuilder
        • GeometryBuilder
      • Geometry
        • Geometry
      • Usage Example
      • Builder Methods
      • Geometry Accessors
      • Surface Roles
    • Simulation Module
      • Overview
      • Simulation
        • Simulation
      • SimulationConfig
        • SimulationConfig
        • Configuration Parameters
      • SimulationResult
        • SimulationResult
        • Result Attributes
      • SimulationStatistics
        • SimulationStatistics
        • Statistics Attributes
      • Usage Example
      • Adaptive Stepping
      • Logging
    • Materials Module
      • Module Structure
      • Classes
      • Constants
      • Functions
      • MaterialField
        • MaterialField.name
        • MaterialField.__init__()
        • MaterialField.get_refractive_index()
        • MaterialField.get_refractive_index_gradient()
        • MaterialField.get_absorption_coefficient()
        • MaterialField.get_scattering_coefficient()
        • MaterialField.get_extinction_coefficient()
        • MaterialField.get_anisotropy_factor()
        • MaterialField.is_homogeneous()
        • MaterialField.supported_kernels()
        • MaterialField.default_kernel()
        • MaterialField.supported_propagators()
        • MaterialField.default_propagator()
        • MaterialField.kernel_id
        • MaterialField.propagator_id
        • MaterialField.get_refractive_index_gradient_magnitude()
        • MaterialField.compute_phase_velocity()
        • MaterialField.__repr__()
      • HomogeneousMaterial
        • HomogeneousMaterial.refractive_index
        • HomogeneousMaterial.absorption_coef
        • HomogeneousMaterial.scattering_coef
        • HomogeneousMaterial.anisotropy
        • HomogeneousMaterial.__init__()
        • HomogeneousMaterial.get_refractive_index()
        • HomogeneousMaterial.get_refractive_index_gradient()
        • HomogeneousMaterial.get_absorption_coefficient()
        • HomogeneousMaterial.get_scattering_coefficient()
        • HomogeneousMaterial.get_anisotropy_factor()
        • HomogeneousMaterial.__repr__()
      • SimpleInhomogeneousModel
        • SimpleInhomogeneousModel.__init__()
        • SimpleInhomogeneousModel.n_at_altitude()
        • SimpleInhomogeneousModel.dn_dh_at_altitude()
        • SimpleInhomogeneousModel.alpha_at_altitude()
        • SimpleInhomogeneousModel.get_refractive_index()
        • SimpleInhomogeneousModel.get_refractive_index_gradient()
        • SimpleInhomogeneousModel.get_absorption_coefficient()
        • SimpleInhomogeneousModel.get_scattering_coefficient()
        • SimpleInhomogeneousModel.gpu_material_id
        • SimpleInhomogeneousModel.get_gpu_kernels()
        • SimpleInhomogeneousModel.get_gpu_parameters()
        • SimpleInhomogeneousModel.get_gpu_arrays()
      • GridInhomogeneousModel
        • GridInhomogeneousModel.__init__()
        • GridInhomogeneousModel.get_refractive_index()
        • GridInhomogeneousModel.get_refractive_index_gradient()
        • GridInhomogeneousModel.get_absorption_coefficient()
        • GridInhomogeneousModel.get_scattering_coefficient()
        • GridInhomogeneousModel.gpu_material_id
        • GridInhomogeneousModel.get_gpu_kernels()
        • GridInhomogeneousModel.get_gpu_parameters()
        • GridInhomogeneousModel.get_gpu_arrays()
      • FullInhomogeneousModel
        • FullInhomogeneousModel.__init__()
        • FullInhomogeneousModel.get_refractive_index()
        • FullInhomogeneousModel.get_refractive_index_gradient()
        • FullInhomogeneousModel.get_absorption_coefficient()
        • FullInhomogeneousModel.get_scattering_coefficient()
        • FullInhomogeneousModel.gpu_material_id
        • FullInhomogeneousModel.get_gpu_kernels()
        • FullInhomogeneousModel.get_gpu_parameters()
      • ExponentialAtmosphere
        • ExponentialAtmosphere.__init__()
        • ExponentialAtmosphere.n_at_altitude()
        • ExponentialAtmosphere.dn_dh_at_altitude()
        • ExponentialAtmosphere.alpha_at_altitude()
        • ExponentialAtmosphere.get_absorption_coefficient()
        • ExponentialAtmosphere.get_density_ratio()
        • ExponentialAtmosphere.compute_curvature_radius()
        • ExponentialAtmosphere.__repr__()
      • create_exponential_atmosphere()
      • DuctAtmosphere
        • DuctAtmosphere.__init__()
        • DuctAtmosphere.n_at_altitude()
        • DuctAtmosphere.dn_dh_at_altitude()
        • DuctAtmosphere.gpu_material_id
        • DuctAtmosphere.get_gpu_kernels()
        • DuctAtmosphere.get_gpu_parameters()
        • DuctAtmosphere.get_duct_gpu_parameters()
        • DuctAtmosphere.get_gpu_arrays()
        • DuctAtmosphere.__repr__()
      • create_duct_atmosphere()
      • sellmeier_refractive_index()
      • cauchy_refractive_index()
      • create_sellmeier_material()
      • create_cauchy_material()
      • device_sellmeier_equation()
      • device_cauchy_equation()
      • Material Classes
        • lsurf.materials.MaterialField
        • lsurf.materials.HomogeneousMaterial
      • Inhomogeneous Material Base Classes
        • lsurf.materials.SimpleInhomogeneousModel
        • lsurf.materials.GridInhomogeneousModel
        • lsurf.materials.FullInhomogeneousModel
      • Predefined Materials
        • lsurf.materials.VACUUM
        • lsurf.materials.AIR_STP
        • lsurf.materials.WATER
        • lsurf.materials.BK7_GLASS
      • Atmosphere Implementations
        • lsurf.materials.ExponentialAtmosphere
        • lsurf.materials.DuctAtmosphere
        • lsurf.materials.STANDARD_ATMOSPHERE
      • Dispersion Functions
        • lsurf.materials.sellmeier_refractive_index
        • lsurf.materials.cauchy_refractive_index
        • lsurf.materials.create_sellmeier_material
        • lsurf.materials.create_cauchy_material
      • Material Classes
        • MaterialField
        • HomogeneousMaterial
      • Pre-defined Materials
        • lsurf.materials.VACUUM
        • lsurf.materials.AIR_STP
        • lsurf.materials.WATER
        • lsurf.materials.BK7_GLASS
      • Dispersion Models
        • sellmeier_refractive_index
        • cauchy_refractive_index
      • Factory Functions
        • create_sellmeier_material
        • create_cauchy_material
      • Examples
        • Using Pre-defined Materials
        • Creating Custom Materials
        • Wavelength Dependence
    • Sources Module
      • Available Sources
      • Interface
      • RaySource
        • RaySource.num_rays
        • RaySource.wavelength
        • RaySource.power
        • RaySource.__init__()
        • RaySource.generate()
        • RaySource.__repr__()
      • PointSource
        • PointSource.position
        • PointSource.__init__()
        • PointSource.generate()
        • PointSource.__repr__()
      • CollimatedBeam
        • CollimatedBeam.center
        • CollimatedBeam.direction
        • CollimatedBeam.radius
        • CollimatedBeam.profile
        • CollimatedBeam.__init__()
        • CollimatedBeam.generate()
        • CollimatedBeam.__repr__()
      • DivergingBeam
        • DivergingBeam.origin
        • DivergingBeam.mean_direction
        • DivergingBeam.divergence_angle
        • DivergingBeam.__init__()
        • DivergingBeam.generate()
        • DivergingBeam.__repr__()
      • UniformDivergingBeam
        • UniformDivergingBeam.origin
        • UniformDivergingBeam.mean_direction
        • UniformDivergingBeam.divergence_angle
        • UniformDivergingBeam.solid_angle
        • UniformDivergingBeam.__init__()
        • UniformDivergingBeam.solid_angle
        • UniformDivergingBeam.generate()
        • UniformDivergingBeam.__repr__()
      • GaussianBeam
        • GaussianBeam.waist_position
        • GaussianBeam.direction
        • GaussianBeam.waist_radius
        • GaussianBeam.rayleigh_range
        • GaussianBeam.__init__()
        • GaussianBeam.generate()
        • GaussianBeam.beam_radius_at()
        • GaussianBeam.divergence_angle()
        • GaussianBeam.__repr__()
      • ParallelBeamFromPositions
        • ParallelBeamFromPositions.positions
        • ParallelBeamFromPositions.direction
        • ParallelBeamFromPositions.__init__()
        • ParallelBeamFromPositions.positions
        • ParallelBeamFromPositions.generate()
        • ParallelBeamFromPositions.__repr__()
      • CustomRaySource
        • CustomRaySource.num_rays
        • CustomRaySource.positions
        • CustomRaySource.directions
        • CustomRaySource.wavelengths
        • CustomRaySource.intensities
        • CustomRaySource.power
        • CustomRaySource.__init__()
        • CustomRaySource.num_rays
        • CustomRaySource.positions
        • CustomRaySource.directions
        • CustomRaySource.wavelengths
        • CustomRaySource.intensities
        • CustomRaySource.power
        • CustomRaySource.generate()
        • CustomRaySource.__repr__()
        • CustomRaySource.from_spectral_fan()
        • CustomRaySource.from_angular_fan()
      • Source Classes
        • lsurf.sources.RaySource
        • lsurf.sources.PointSource
        • lsurf.sources.CollimatedBeam
        • lsurf.sources.DivergingBeam
        • lsurf.sources.GaussianBeam
        • lsurf.sources.ParallelBeamFromPositions
    • Surfaces Module
      • Surface Types
      • Protocol
      • Surface
        • Surface.role
        • Surface.name
        • Surface.material_front
        • Surface.material_back
        • Surface.gpu_capable
        • Surface.geometry_id
        • Surface.__init__()
        • Surface.gpu_capable
        • Surface.geometry_id
        • Surface.geometry
        • Surface.supported_kernels()
        • Surface.default_kernel()
        • Surface.kernel_id
        • Surface.intersect()
        • Surface.normal_at()
        • Surface.get_materials()
        • Surface.signed_distance()
        • Surface.get_gpu_parameters()
        • Surface.__repr__()
      • SurfaceRole
        • SurfaceRole.DETECTOR
        • SurfaceRole.OPTICAL
        • SurfaceRole.ABSORBER
      • GPUSurface
      • SurfaceTypeInfo
        • SurfaceTypeInfo.name
        • SurfaceTypeInfo.capability
        • SurfaceTypeInfo.id
        • SurfaceTypeInfo.cls
        • SurfaceTypeInfo.__init__()
      • register_surface_type()
      • get_surface_type()
      • get_surface_type_id()
      • get_surface_class()
      • is_gpu_capable()
      • list_surface_types()
      • surface_type_exists()
      • GeometryInfo
      • register_geometry()
      • get_geometry_info()
      • get_geometry_id()
      • list_geometries()
      • geometry_exists()
      • PlaneSurface
        • PlaneSurface.point
        • PlaneSurface.normal
        • PlaneSurface.role
        • PlaneSurface.name
        • PlaneSurface.material_front
        • PlaneSurface.material_back
        • PlaneSurface.supported_kernels()
        • PlaneSurface.default_kernel()
        • PlaneSurface.gpu_capable
        • PlaneSurface.geometry_id
        • PlaneSurface.get_gpu_parameters()
        • PlaneSurface.get_materials()
        • PlaneSurface.signed_distance()
        • PlaneSurface.intersect()
        • PlaneSurface.normal_at()
        • PlaneSurface.__init__()
      • SphereSurface
        • SphereSurface.center
        • SphereSurface.radius
        • SphereSurface.role
        • SphereSurface.name
        • SphereSurface.material_front
        • SphereSurface.material_back
        • SphereSurface.supported_kernels()
        • SphereSurface.default_kernel()
        • SphereSurface.gpu_capable
        • SphereSurface.geometry_id
        • SphereSurface.get_gpu_parameters()
        • SphereSurface.get_materials()
        • SphereSurface.signed_distance()
        • SphereSurface.intersect()
        • SphereSurface.normal_at()
        • SphereSurface.__init__()
      • RecordingSphereSurface
        • RecordingSphereSurface.altitude
        • RecordingSphereSurface.earth_center
        • RecordingSphereSurface.earth_radius
        • RecordingSphereSurface.name
        • RecordingSphereSurface.role
        • RecordingSphereSurface.material_front
        • RecordingSphereSurface.material_back
        • RecordingSphereSurface.supported_kernels()
        • RecordingSphereSurface.default_kernel()
        • RecordingSphereSurface.__post_init__()
        • RecordingSphereSurface.gpu_capable
        • RecordingSphereSurface.geometry_id
        • RecordingSphereSurface.sphere_radius
        • RecordingSphereSurface.center
        • RecordingSphereSurface.center_array
        • RecordingSphereSurface.get_gpu_parameters()
        • RecordingSphereSurface.get_materials()
        • RecordingSphereSurface.signed_distance()
        • RecordingSphereSurface.intersect()
        • RecordingSphereSurface.normal_at()
        • RecordingSphereSurface.compute_angular_coordinates()
        • RecordingSphereSurface.__repr__()
        • RecordingSphereSurface.__init__()
      • LocalRecordingSphereSurface
        • LocalRecordingSphereSurface.radius
        • LocalRecordingSphereSurface.center
        • LocalRecordingSphereSurface.name
        • LocalRecordingSphereSurface.role
        • LocalRecordingSphereSurface.material_front
        • LocalRecordingSphereSurface.material_back
        • LocalRecordingSphereSurface.supported_kernels()
        • LocalRecordingSphereSurface.default_kernel()
        • LocalRecordingSphereSurface.__post_init__()
        • LocalRecordingSphereSurface.gpu_capable
        • LocalRecordingSphereSurface.geometry_id
        • LocalRecordingSphereSurface.sphere_radius
        • LocalRecordingSphereSurface.center_array
        • LocalRecordingSphereSurface.get_gpu_parameters()
        • LocalRecordingSphereSurface.get_materials()
        • LocalRecordingSphereSurface.signed_distance()
        • LocalRecordingSphereSurface.intersect()
        • LocalRecordingSphereSurface.normal_at()
        • LocalRecordingSphereSurface.__repr__()
        • LocalRecordingSphereSurface.__init__()
      • GPUGerstnerWaveSurface
        • GPUGerstnerWaveSurface.amplitude
        • GPUGerstnerWaveSurface.wavelength
        • GPUGerstnerWaveSurface.direction
        • GPUGerstnerWaveSurface.reference_z
        • GPUGerstnerWaveSurface.role
        • GPUGerstnerWaveSurface.phase
        • GPUGerstnerWaveSurface.time
        • GPUGerstnerWaveSurface.name
        • GPUGerstnerWaveSurface.material_front
        • GPUGerstnerWaveSurface.material_back
        • GPUGerstnerWaveSurface.gpu_capable
        • GPUGerstnerWaveSurface.geometry_id
        • GPUGerstnerWaveSurface.wave_number
        • GPUGerstnerWaveSurface.angular_frequency
        • GPUGerstnerWaveSurface.get_gpu_parameters()
        • GPUGerstnerWaveSurface.get_materials()
        • GPUGerstnerWaveSurface.signed_distance()
        • GPUGerstnerWaveSurface.intersect()
        • GPUGerstnerWaveSurface.normal_at()
        • GPUGerstnerWaveSurface.set_time()
        • GPUGerstnerWaveSurface.__init__()
      • GPUCurvedWaveSurface
        • GPUCurvedWaveSurface.amplitude
        • GPUCurvedWaveSurface.wavelength
        • GPUCurvedWaveSurface.direction
        • GPUCurvedWaveSurface.role
        • GPUCurvedWaveSurface.earth_center
        • GPUCurvedWaveSurface.earth_radius
        • GPUCurvedWaveSurface.time
        • GPUCurvedWaveSurface.name
        • GPUCurvedWaveSurface.material_front
        • GPUCurvedWaveSurface.material_back
        • GPUCurvedWaveSurface.gpu_capable
        • GPUCurvedWaveSurface.geometry_id
        • GPUCurvedWaveSurface.wave_number
        • GPUCurvedWaveSurface.angular_frequency
        • GPUCurvedWaveSurface.get_gpu_parameters()
        • GPUCurvedWaveSurface.get_materials()
        • GPUCurvedWaveSurface.signed_distance()
        • GPUCurvedWaveSurface.intersect()
        • GPUCurvedWaveSurface.normal_at()
        • GPUCurvedWaveSurface.set_time()
        • GPUCurvedWaveSurface.__init__()
      • GPUMultiCurvedWaveSurface
        • GPUMultiCurvedWaveSurface.wave_params
        • GPUMultiCurvedWaveSurface.role
        • GPUMultiCurvedWaveSurface.earth_center
        • GPUMultiCurvedWaveSurface.earth_radius
        • GPUMultiCurvedWaveSurface.time
        • GPUMultiCurvedWaveSurface.name
        • GPUMultiCurvedWaveSurface.material_front
        • GPUMultiCurvedWaveSurface.material_back
        • GPUMultiCurvedWaveSurface.gpu_capable
        • GPUMultiCurvedWaveSurface.geometry_id
        • GPUMultiCurvedWaveSurface.num_waves
        • GPUMultiCurvedWaveSurface.max_amplitude
        • GPUMultiCurvedWaveSurface.get_gpu_parameters()
        • GPUMultiCurvedWaveSurface.get_materials()
        • GPUMultiCurvedWaveSurface.signed_distance()
        • GPUMultiCurvedWaveSurface.intersect()
        • GPUMultiCurvedWaveSurface.normal_at()
        • GPUMultiCurvedWaveSurface.set_time()
        • GPUMultiCurvedWaveSurface.__init__()
      • BoundedPlaneSurface
        • BoundedPlaneSurface.point
        • BoundedPlaneSurface.normal
        • BoundedPlaneSurface.width
        • BoundedPlaneSurface.height
        • BoundedPlaneSurface.role
        • BoundedPlaneSurface.name
        • BoundedPlaneSurface.material_front
        • BoundedPlaneSurface.material_back
        • BoundedPlaneSurface.supported_kernels()
        • BoundedPlaneSurface.default_kernel()
        • BoundedPlaneSurface.gpu_capable
        • BoundedPlaneSurface.geometry_id
        • BoundedPlaneSurface.half_width
        • BoundedPlaneSurface.half_height
        • BoundedPlaneSurface.get_gpu_parameters()
        • BoundedPlaneSurface.get_materials()
        • BoundedPlaneSurface.signed_distance()
        • BoundedPlaneSurface.intersect()
        • BoundedPlaneSurface.normal_at()
        • BoundedPlaneSurface.__init__()
      • AnnularPlaneSurface
        • AnnularPlaneSurface.center
        • AnnularPlaneSurface.normal
        • AnnularPlaneSurface.inner_radius
        • AnnularPlaneSurface.outer_radius
        • AnnularPlaneSurface.role
        • AnnularPlaneSurface.name
        • AnnularPlaneSurface.material_front
        • AnnularPlaneSurface.material_back
        • AnnularPlaneSurface.supported_kernels()
        • AnnularPlaneSurface.default_kernel()
        • AnnularPlaneSurface.gpu_capable
        • AnnularPlaneSurface.geometry_id
        • AnnularPlaneSurface.area
        • AnnularPlaneSurface.get_gpu_parameters()
        • AnnularPlaneSurface.get_materials()
        • AnnularPlaneSurface.signed_distance()
        • AnnularPlaneSurface.intersect()
        • AnnularPlaneSurface.normal_at()
        • AnnularPlaneSurface.get_local_coordinates()
        • AnnularPlaneSurface.get_polar_coordinates()
        • AnnularPlaneSurface.__init__()
      • GerstnerWaveSurface
        • GerstnerWaveSurface.wave_params
        • GerstnerWaveSurface.role
        • GerstnerWaveSurface.name
        • GerstnerWaveSurface.time
        • GerstnerWaveSurface.reference_z
        • GerstnerWaveSurface.material_front
        • GerstnerWaveSurface.material_back
        • GerstnerWaveSurface.max_distance
        • GerstnerWaveSurface.gpu_capable
        • GerstnerWaveSurface.geometry_id
        • GerstnerWaveSurface.get_materials()
        • GerstnerWaveSurface.get_max_wave_height()
        • GerstnerWaveSurface.intersect()
        • GerstnerWaveSurface.normal_at()
        • GerstnerWaveSurface.set_time()
        • GerstnerWaveSurface.__init__()
      • CurvedWaveSurface
        • CurvedWaveSurface.wave_params
        • CurvedWaveSurface.role
        • CurvedWaveSurface.name
        • CurvedWaveSurface.earth_center
        • CurvedWaveSurface.earth_radius
        • CurvedWaveSurface.time
        • CurvedWaveSurface.material_front
        • CurvedWaveSurface.material_back
        • CurvedWaveSurface.gpu_capable
        • CurvedWaveSurface.geometry_id
        • CurvedWaveSurface.get_materials()
        • CurvedWaveSurface.get_max_wave_height()
        • CurvedWaveSurface.intersect()
        • CurvedWaveSurface.normal_at()
        • CurvedWaveSurface.set_time()
        • CurvedWaveSurface.__init__()
      • GerstnerWaveParams
        • GerstnerWaveParams.wave_number
        • GerstnerWaveParams.angular_frequency
        • GerstnerWaveParams.direction_normalized
        • GerstnerWaveParams.amplitude
        • GerstnerWaveParams.wavelength
        • GerstnerWaveParams.direction
        • GerstnerWaveParams.phase
        • GerstnerWaveParams.steepness
        • GerstnerWaveParams.wave_number
        • GerstnerWaveParams.angular_frequency
        • GerstnerWaveParams.direction_normalized
        • GerstnerWaveParams.__init__()
      • Surface Classes
        • lsurf.surfaces.GerstnerWaveSurface
        • lsurf.surfaces.CurvedWaveSurface
    • Detectors Module
      • Module Structure
      • Primary Classes
      • Available Detectors
      • Analysis Functions
      • Interface
      • DetectorResult
        • DetectorResult.positions
        • DetectorResult.directions
        • DetectorResult.times
        • DetectorResult.intensities
        • DetectorResult.wavelengths
        • DetectorResult.ray_indices
        • DetectorResult.generations
        • DetectorResult.polarization_vectors
        • DetectorResult.detector_name
        • DetectorResult.metadata
        • DetectorResult.positions
        • DetectorResult.directions
        • DetectorResult.times
        • DetectorResult.intensities
        • DetectorResult.wavelengths
        • DetectorResult.ray_indices
        • DetectorResult.generations
        • DetectorResult.polarization_vectors
        • DetectorResult.detector_name
        • DetectorResult.metadata
        • DetectorResult.num_rays
        • DetectorResult.total_intensity
        • DetectorResult.is_empty
        • DetectorResult.compute_statistics()
        • DetectorResult.compute_time_histogram()
        • DetectorResult.compute_angular_distribution()
        • DetectorResult.compute_angular_coordinates()
        • DetectorResult.compute_viewing_angle_from_origin()
        • DetectorResult.compute_ray_direction_angles()
        • DetectorResult.filter()
        • DetectorResult.filter_by_wavelength()
        • DetectorResult.filter_by_time()
        • DetectorResult.filter_by_intensity()
        • DetectorResult.empty()
        • DetectorResult.merge()
        • DetectorResult.save_npz()
        • DetectorResult.load_npz()
        • DetectorResult.save_hdf5()
        • DetectorResult.load_hdf5()
        • DetectorResult.to_detection_events()
        • DetectorResult.from_detection_events()
        • DetectorResult.to_recorded_rays()
        • DetectorResult.from_recorded_rays()
        • DetectorResult.__repr__()
        • DetectorResult.__len__()
        • DetectorResult.__iter__()
        • DetectorResult.__getitem__()
        • DetectorResult.__init__()
      • DetectorProtocol
        • DetectorProtocol.name
        • DetectorProtocol.detect()
        • DetectorProtocol.clear()
        • DetectorProtocol.name
        • DetectorProtocol.detect()
        • DetectorProtocol.clear()
        • DetectorProtocol.__init__()
      • AccumulatingDetectorProtocol
        • AccumulatingDetectorProtocol.name
        • AccumulatingDetectorProtocol.accumulated_result
        • AccumulatingDetectorProtocol.accumulated_result
      • ExtendedDetectorProtocol
        • ExtendedDetectorProtocol.name
        • ExtendedDetectorProtocol.sphere_radius
        • ExtendedDetectorProtocol.center
        • ExtendedDetectorProtocol.sphere_radius
        • ExtendedDetectorProtocol.center
      • Detector
        • Detector.name
        • Detector.events
        • Detector.__init__()
        • Detector.detect()
        • Detector.clear()
        • Detector.get_arrival_times()
        • Detector.get_arrival_angles()
        • Detector.get_intensities()
        • Detector.get_wavelengths()
        • Detector.get_positions()
        • Detector.get_total_intensity()
        • Detector.__len__()
        • Detector.__repr__()
      • DetectionEvent
        • DetectionEvent.ray_index
        • DetectionEvent.position
        • DetectionEvent.direction
        • DetectionEvent.time
        • DetectionEvent.wavelength
        • DetectionEvent.intensity
        • DetectionEvent.__init__()
      • SphericalDetector
        • SphericalDetector.center
        • SphericalDetector.radius
        • SphericalDetector.use_gpu
        • SphericalDetector.name
        • SphericalDetector.accumulated_result
        • SphericalDetector.__init__()
        • SphericalDetector.accumulated_result
        • SphericalDetector.events
        • SphericalDetector.detect()
        • SphericalDetector.clear()
        • SphericalDetector.__repr__()
        • SphericalDetector.__len__()
        • SphericalDetector.get_arrival_times()
        • SphericalDetector.get_arrival_angles()
        • SphericalDetector.get_intensities()
        • SphericalDetector.get_wavelengths()
        • SphericalDetector.get_positions()
        • SphericalDetector.get_total_intensity()
      • PlanarDetector
        • PlanarDetector.center
        • PlanarDetector.normal
        • PlanarDetector.width
        • PlanarDetector.height
        • PlanarDetector.u
        • PlanarDetector.v
        • PlanarDetector.name
        • PlanarDetector.accumulated_result
        • PlanarDetector.__init__()
        • PlanarDetector.accumulated_result
        • PlanarDetector.events
        • PlanarDetector.detect()
        • PlanarDetector.clear()
        • PlanarDetector.get_image()
        • PlanarDetector.__repr__()
        • PlanarDetector.__len__()
        • PlanarDetector.get_arrival_times()
        • PlanarDetector.get_arrival_angles()
        • PlanarDetector.get_intensities()
        • PlanarDetector.get_wavelengths()
        • PlanarDetector.get_positions()
        • PlanarDetector.get_total_intensity()
      • DirectionalDetector
        • DirectionalDetector.position
        • DirectionalDetector.direction
        • DirectionalDetector.acceptance_angle
        • DirectionalDetector.radius
        • DirectionalDetector.name
        • DirectionalDetector.accumulated_result
        • DirectionalDetector.__init__()
        • DirectionalDetector.accumulated_result
        • DirectionalDetector.events
        • DirectionalDetector.detect()
        • DirectionalDetector.clear()
        • DirectionalDetector.__repr__()
        • DirectionalDetector.__len__()
        • DirectionalDetector.get_arrival_times()
        • DirectionalDetector.get_arrival_angles()
        • DirectionalDetector.get_intensities()
        • DirectionalDetector.get_wavelengths()
        • DirectionalDetector.get_positions()
        • DirectionalDetector.get_total_intensity()
      • RecordingSphereDetector
        • RecordingSphereDetector.altitude
        • RecordingSphereDetector.sphere_radius
        • RecordingSphereDetector.center
        • RecordingSphereDetector.name
        • RecordingSphereDetector.accumulated_result
        • RecordingSphereDetector.__init__()
        • RecordingSphereDetector.sphere_radius
        • RecordingSphereDetector.center
        • RecordingSphereDetector.accumulated_result
        • RecordingSphereDetector.events
        • RecordingSphereDetector.detect()
        • RecordingSphereDetector.detect_rays()
        • RecordingSphereDetector.clear()
        • RecordingSphereDetector.__repr__()
        • RecordingSphereDetector.__len__()
        • RecordingSphereDetector.get_arrival_times()
        • RecordingSphereDetector.get_arrival_angles()
        • RecordingSphereDetector.get_intensities()
        • RecordingSphereDetector.get_wavelengths()
        • RecordingSphereDetector.get_positions()
        • RecordingSphereDetector.get_total_intensity()
      • LocalRecordingSphereDetector
        • LocalRecordingSphereDetector.sphere_radius
        • LocalRecordingSphereDetector.center
        • LocalRecordingSphereDetector.name
        • LocalRecordingSphereDetector.accumulated_result
        • LocalRecordingSphereDetector.__init__()
        • LocalRecordingSphereDetector.sphere_radius
        • LocalRecordingSphereDetector.center
        • LocalRecordingSphereDetector.accumulated_result
        • LocalRecordingSphereDetector.events
        • LocalRecordingSphereDetector.detect()
        • LocalRecordingSphereDetector.detect_rays()
        • LocalRecordingSphereDetector.record_rays()
        • LocalRecordingSphereDetector.clear()
        • LocalRecordingSphereDetector.__repr__()
        • LocalRecordingSphereDetector.__len__()
        • LocalRecordingSphereDetector.get_arrival_times()
        • LocalRecordingSphereDetector.get_arrival_angles()
        • LocalRecordingSphereDetector.get_intensities()
        • LocalRecordingSphereDetector.get_wavelengths()
        • LocalRecordingSphereDetector.get_positions()
        • LocalRecordingSphereDetector.get_total_intensity()
      • RecordingSphereBase
      • RecordingSphere
      • LocalRecordingSphere
      • compute_angular_distribution()
      • compute_time_distribution()
      • compute_intensity_distribution()
      • compute_wavelength_distribution()
      • compute_statistics()
      • detect_multi_spherical_gpu()
      • detect_multi_position_gpu()
      • ConstantSizeDetectorRings
        • ConstantSizeDetectorRings.ring_boundaries_deg
        • ConstantSizeDetectorRings.ring_centers_deg
        • ConstantSizeDetectorRings.ring_distances
        • ConstantSizeDetectorRings.n_rings
        • ConstantSizeDetectorRings.detector_sphere_radius
        • ConstantSizeDetectorRings.detector_radial_size
        • ConstantSizeDetectorRings.detector_altitude
        • ConstantSizeDetectorRings.max_elevation_deg
        • ConstantSizeDetectorRings.min_elevation_deg
        • ConstantSizeDetectorRings.earth_radius
        • ConstantSizeDetectorRings.ring_boundaries_deg
        • ConstantSizeDetectorRings.ring_centers_deg
        • ConstantSizeDetectorRings.ring_distances
        • ConstantSizeDetectorRings.n_rings
        • ConstantSizeDetectorRings.detector_sphere_radius
        • ConstantSizeDetectorRings.__post_init__()
        • ConstantSizeDetectorRings.detector_half_width
        • ConstantSizeDetectorRings.distance_at_elevation()
        • ConstantSizeDetectorRings.point_at_elevation()
        • ConstantSizeDetectorRings.find_detector_center()
        • ConstantSizeDetectorRings.angular_width_at_ring()
        • ConstantSizeDetectorRings.horizontal_distance_at_elevation()
        • ConstantSizeDetectorRings.get_ring_horizontal_distances()
        • ConstantSizeDetectorRings.summary()
        • ConstantSizeDetectorRings.get_ring_info()
        • ConstantSizeDetectorRings.azimuth_bins_for_ring()
        • ConstantSizeDetectorRings.get_constant_size_grid()
        • ConstantSizeDetectorRings.__init__()
      • create_default_detector_rings()
      • Detector Classes
        • lsurf.detectors.Detector
        • lsurf.detectors.SphericalDetector
        • lsurf.detectors.PlanarDetector
        • lsurf.detectors.DirectionalDetector
      • Detection Analysis
        • lsurf.detectors.analysis.compute_angular_distribution
        • lsurf.detectors.analysis.compute_time_distribution
        • lsurf.detectors.analysis.compute_intensity_distribution
        • lsurf.detectors.analysis.compute_wavelength_distribution
        • lsurf.detectors.analysis.compute_statistics
    • Propagation Module
      • Overview
      • Propagators
        • GradientPropagator (CPU)
        • GPUGradientPropagator (GPU)
      • Propagator Factory
        • create_propagator()
        • Usage Example
      • Material IDs
        • GPUMaterialID
      • Kernel Registry
        • PropagationKernelID
        • IntersectionKernelID
        • DetectionKernelID
        • FresnelKernelID
        • PropagatorID
        • register_kernel()
        • get_kernel()
        • get_registered_kernels()
        • list_kernels()
        • Available Kernels
      • Architecture
      • Device Functions
        • device_adaptive_step_size()
        • device_euler_step()
        • device_rk4_step()
        • device_sellmeier_equation()
        • device_cauchy_equation()
        • euler_step()
        • rk4_step()
        • compute_adaptive_step_size()
        • normalize_directions()
        • euler_step_batch()
        • rk4_step_batch()
      • Integration with Simulation
    • Interactions Module
      • Functions
    • Visualization Module
      • Modules
      • get_color_mapping()
      • get_projection_config()
      • wavelength_to_color()
      • setup_axis_grid()
      • add_colorbar()
      • create_figure()
      • save_figure()
      • plot_ray_paths_projection()
      • plot_ray_endpoints_scatter()
      • plot_ray_endpoints_histogram()
      • plot_surface_profile()
      • plot_bounce_points()
      • plot_incoming_rays()
      • plot_reflected_rays()
      • plot_multi_bounce_paths()
      • create_ray_overview_figure()
      • plot_production_ray_overview()
      • plot_wave_surface_detail()
      • plot_ray_paths_with_surface()
      • plot_fresnel_reflection()
      • plot_brewster_validation()
      • plot_polarization_vector_components()
      • plot_polarization_ellipse()
      • plot_polarization_vs_elevation()
      • plot_fresnel_reflectance_curves()
      • plot_measured_polarization_reflectance()
      • get_ray_coordinates()
      • plot_ray_paths_2d()
      • plot_ray_endpoints()
      • plot_beam_slice()
      • plot_wavelength_histogram()
      • plot_wavelength_intensity_histogram()
      • plot_detection_counts()
      • plot_detection_efficiency()
      • plot_mean_arrival_time()
      • plot_timing_distribution()
      • plot_arrival_angle_distribution()
      • plot_angular_histogram()
      • create_wavelength_figure()
      • create_beam_profile_figure()
      • create_detector_scan_figure()
      • plot_detector_scan_results()
      • plot_statistics_evolution()
      • plot_beam_profile()
      • plot_wavelength_distribution()
      • create_ocean_simulation_figures()
      • plot_geometry_schematic()
      • plot_ocean_intersections_top_view()
      • plot_3d_intersection_scatter()
      • plot_pareto_front()
      • plot_energy_density_map()
      • plot_mollweide_detector_projection()
      • plot_time_spread_comparison()
      • plot_arrival_time_distributions()
      • plot_time_spread_geometry_side()
      • plot_beam_footprint_top()
      • plot_arrival_time_histogram()
      • plot_footprint_arrival_times()
      • plot_time_spread_vs_divergence()
      • create_time_spread_schematic()
      • create_arrival_time_figure()
      • plot_ray_trajectories()
      • plot_refractive_index_profile()
      • plot_trajectory_offset()
      • plot_horizontal_ray_deviation()
      • create_atmospheric_refraction_figure()
      • create_atmospheric_refraction_figure_with_offset()
      • plot_trajectory_comparison()
      • save_atmospheric_figure()
      • plot_homogeneous_absorption()
      • plot_exponential_atmosphere_absorption()
      • plot_spectral_atmosphere_absorption()
      • plot_geometry_analysis()
      • plot_ring_side_view()
      • plot_ring_overview()
      • plot_ring_azimuth_heatmap()
      • plot_timing_heatmap()
      • plot_per_ring_timing_distributions()
      • plot_spread_analysis()
      • plot_polar_irradiance()
      • plot_ring_time_spread_comparison()
      • plot_constant_size_timing_analysis()
      • plot_constant_size_timing_distributions()
      • compute_ring_azimuth_maps()
      • compute_ring_spread_stats()
      • compute_constant_size_bin_stats()
      • Submodules
        • lsurf.visualization.raytracing_plots
        • lsurf.visualization.detector_plots
        • lsurf.visualization.common
    • Utilities Module
      • Core Utilities
        • Submodules
        • RayBatch
        • RayStatistics
        • create_ray_batch()
        • compute_statistics()
        • merge_ray_batches()
        • fresnel_coefficients()
        • compute_reflection_direction()
        • compute_refraction_direction()
        • PropagationMode
        • PropagationConfig
        • StraightLinePropagator
        • GradientPropagator
        • IPropagator
        • RecordingSphere
        • LocalRecordingSphere
        • RecordedRays
        • save_recorded_rays_hdf5()
        • load_recorded_rays_hdf5()
        • save_recorded_rays_numpy()
        • load_recorded_rays_numpy()
        • TimeSpreadResult
        • estimate_time_spread()
        • estimate_time_spread_bounds()
        • compute_beam_footprint()
        • find_peak_energy_density()
        • find_peak_irradiance_local()
        • compute_pareto_front()
        • analyze_healpix_detector()
        • compute_healpix_pareto_front()
        • process_surface_interaction()
        • reflect_rays()
        • refract_rays()
        • trace_rays_multi_bounce()
        • trace_rays_with_splitting()
    • Module Overview
      • Simulation Framework
      • Core Modules
    • Quick Reference
      • Setting Up a Simulation
      • Creating Objects
      • Processing Results
      • Simple Surface Interaction
      • Visualization
      • Logging

Development

  • Contributing
    • Getting Started
      • Development Setup
    • Code Style
      • Python Style
      • Docstring Format
    • Testing
      • Running Tests
      • Writing Tests
    • Documentation
      • Building Documentation
      • Writing Documentation
      • Adding Examples
    • Pull Request Process
      • Commit Message Format
    • Code Review Checklist
    • Reporting Issues
      • Bug Reports
      • Feature Requests
      • Questions
    • License
  • Changelog
    • [0.2.0] - 2024-12-28
      • Added
      • Changed
      • Fixed
    • [0.1.0] - 2024-12-01
      • Added
L-SURF
  • Python Module Index

Python Module Index

l
 
l
- lsurf
    lsurf.detectors
    lsurf.geometry
    lsurf.interactions
    lsurf.materials
    lsurf.propagation
    lsurf.propagation.kernels.device_functions
    lsurf.propagation.kernels.registry
    lsurf.simulation
    lsurf.sources
    lsurf.surfaces
    lsurf.utilities
    lsurf.visualization
    lsurf.visualization.common
    lsurf.visualization.detector_plots
    lsurf.visualization.raytracing_plots

© Copyright 2024-2025, L-SURF Development Team.

Built with Sphinx using a theme provided by Read the Docs.