lsurf.sources.RaySource
- class lsurf.sources.RaySource(num_rays, wavelength, power=1.0)[source]
Abstract base class for ray sources.
A ray source defines initial conditions for a ray batch, including spatial distribution, angular distribution, wavelength spectrum, and intensity distribution.
- Parameters:
Notes
Derived classes must implement the generate() method which returns a fully initialized RayBatch.
The ray intensities should sum to the total power (conservation of energy). When generating rays, use _allocate_rays() to create the batch with proper initialization and _assign_wavelengths() to set wavelengths.
Examples
Creating a custom source:
>>> class MySource(RaySource): ... def __init__(self, position, num_rays, wavelength, power=1.0): ... super().__init__(num_rays, wavelength, power) ... self.position = np.array(position) ... ... def generate(self): ... rays = self._allocate_rays() ... rays.positions[:] = self.position ... # Set directions... ... self._assign_wavelengths(rays) ... return rays
- __init__(num_rays, wavelength, power=1.0)[source]
Initialize ray source.
- Parameters:
- Raises:
ValueError – If num_rays <= 0, power <= 0, wavelength <= 0, or wavelength range is invalid.
Methods
__init__(num_rays, wavelength[, power])Initialize ray source.
generate()Generate ray batch with initial conditions.
- __init__(num_rays, wavelength, power=1.0)[source]
Initialize ray source.
- Parameters:
- Raises:
ValueError – If num_rays <= 0, power <= 0, wavelength <= 0, or wavelength range is invalid.
- abstractmethod generate()[source]
Generate ray batch with initial conditions.
Creates and initializes a RayBatch with positions, directions, wavelengths, and intensities according to the source configuration.
- Returns:
Initialized rays ready for propagation.
- Return type:
Notes
Implementations should ensure: - All rays are marked as active - Directions are normalized - Intensities sum to total power - Wavelengths are set appropriately