Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion pytissueoptics/rayscattering/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from .opencl import CONFIG, disableOpenCL, hardwareAccelerationIsAvailable
from .photon import Photon
from .scatteringScene import ScatteringScene
from .source import DirectionalSource, DivergentSource, IsotropicPointSource, PencilPointSource
from .source import DirectionalSource, DivergentSource, ConvergentSource, IsotropicPointSource, PencilPointSource
from .statistics import Stats

__all__ = [
Expand All @@ -28,6 +28,7 @@
"IsotropicPointSource",
"DirectionalSource",
"DivergentSource",
"ConvergentSource",
"EnergyLogger",
"EnergyType",
"ScatteringScene",
Expand Down
34 changes: 34 additions & 0 deletions pytissueoptics/rayscattering/source.py
Original file line number Diff line number Diff line change
Expand Up @@ -335,3 +335,37 @@ def _getInitialDirections(self):
@property
def _hashComponents(self) -> tuple:
return self._position, self._direction, self._diameter, self._divergence


class ConvergentSource(DirectionalSource):
def __init__(
self,
position: Vector,
focal_point: Vector,
diameter: float,
N: int,
useHardwareAcceleration: bool = True,
displaySize: float = 0.1,
seed: Optional[int] = None,
):
self._focal_point = focal_point

super().__init__(
position=position,
direction=focal_point - position,
diameter=diameter,
N=N,
useHardwareAcceleration=useHardwareAcceleration,
displaySize=displaySize,
seed=seed,
)

def getInitialPositionsAndDirections(self) -> Tuple[np.ndarray, np.ndarray]:
positions = self._getUniformlySampledDisc(self._diameter) + self._position.array
directions = self._focal_point.array - positions
directions /= np.linalg.norm(directions, axis=1, keepdims=True)
return positions, directions

@property
def _hashComponents(self) -> tuple:
return self._position, self._direction, self._diameter, self._focal_point