Skip to content

Commit 5cd4916

Browse files
committed
add lens_minimal_diameter
1 parent 3b43510 commit 5cd4916

File tree

3 files changed

+36
-3
lines changed

3 files changed

+36
-3
lines changed

src/torchlensmaker/__init__.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
SagSum,
4545
SagFunction,
4646
)
47+
from torchlensmaker.core.tensor_manip import to_tensor
4748

4849
############
4950
# Kinematics
@@ -123,6 +124,7 @@
123124
from torchlensmaker.light_sources.light_sources_elements import (
124125
RaySource,
125126
PointSourceAtInfinity,
127+
PointSourceAtInfinity2D,
126128
PointSource,
127129
ObjectAtInfinity,
128130
Object,
@@ -161,6 +163,12 @@
161163
########
162164
from . import lenses
163165

166+
##########
167+
# Cardinal
168+
##########
169+
170+
from . import cardinal
171+
164172
##############
165173
# Optimization
166174
##############

src/torchlensmaker/lens/lens.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@
2020

2121
from torchlensmaker.elements.sequential import SequentialElement, Sequential
2222
from torchlensmaker.optical_data import OpticalData
23-
from .lens_thickness import lens_inner_thickness, lens_outer_thickness
23+
from .lens_thickness import (
24+
lens_inner_thickness,
25+
lens_outer_thickness,
26+
lens_minimal_diameter,
27+
)
2428

2529

2630
class Lens(SequentialElement):
@@ -36,3 +40,6 @@ def inner_thickness(self) -> Float[torch.Tensor, ""]:
3640

3741
def outer_thickness(self) -> Float[torch.Tensor, ""]:
3842
return lens_outer_thickness(self)
43+
44+
def minimal_diameter(self) -> Float[torch.Tensor, ""]:
45+
return lens_minimal_diameter(self)

src/torchlensmaker/lens/lens_thickness.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def tokinematic(mod: nn.Module) -> KinematicElement:
5050
raise RuntimeError("inner_thickness() got invalid lens")
5151

5252

53-
def lens_inner_thickness(lens: 'Lens') -> Float[torch.Tensor, ""]:
53+
def lens_inner_thickness(lens: "Lens") -> Float[torch.Tensor, ""]:
5454
"Thickness of a lens at the center"
5555

5656
first_surface, last_surface = lens.sequence[0], lens.sequence[-1]
@@ -87,7 +87,7 @@ def lens_inner_thickness(lens: 'Lens') -> Float[torch.Tensor, ""]:
8787
return (p2 - p1)[0]
8888

8989

90-
def lens_outer_thickness(lens: 'Lens') -> Float[torch.Tensor, ""]:
90+
def lens_outer_thickness(lens: "Lens") -> Float[torch.Tensor, ""]:
9191
"Thickness of a lens at the edge"
9292

9393
front_surface, rear_surface = lens.sequence[0], lens.sequence[-1]
@@ -124,3 +124,21 @@ def lens_outer_thickness(lens: 'Lens') -> Float[torch.Tensor, ""]:
124124
p2 = transform_points(a2, root_point)
125125

126126
return (p2 - p1)[0]
127+
128+
129+
def lens_minimal_diameter(lens: "Lens") -> Float[torch.Tensor, ""]:
130+
"""
131+
Minimal diameter of a lens
132+
133+
The minimal diameter of a lens is the smallest surface diameter,
134+
out of all the surfaces in the lens
135+
"""
136+
137+
mini = lens.sequence[0].collision_surface.surface.diameter
138+
for mod in lens.sequence:
139+
if isinstance(mod, RefractiveSurface):
140+
diam = mod.collision_surface.surface.diameter
141+
if diam < mini:
142+
mini = diam
143+
144+
return mini

0 commit comments

Comments
 (0)