Skip to content
python
import torch
import torchlensmaker as tlm

doublet = tlm.Sequential(
    tlm.RefractiveSurface(tlm.Sphere(4.0, C=0.135327), material=tlm.NonDispersiveMaterial(1.517)),
    tlm.Gap(1.05),
    tlm.RefractiveSurface(tlm.Sphere(4.0, C=-0.19311), material=tlm.NonDispersiveMaterial(1.649)),
    tlm.Gap(0.4),
    tlm.RefractiveSurface(tlm.Sphere(4.0, C=-0.06164), material="air"),
)

optics = tlm.Sequential(
    tlm.PointSourceAtInfinity(3.0),
    tlm.Gap(2),
    doublet,
)

print(optics)
Sequential(
  (0): PointSourceAtInfinity(
    (module_2d): PointSourceAtInfinity2D(
      (sampler_pupil): LinspaceSampler1D(N=5)
      (sampler_field): ZeroSampler1D()
      (sampler_wavelength): LinspaceSampler1D(N=5)
      (material): NonDispersiveMaterial(n=1.0002700090408325)
      (geometry): ObjectAtInfinityGeometry2D()
    )
    (module_3d): PointSourceAtInfinity3D(
      (sampler_pupil): DiskSampler2D(Nrho=5, Ntheta=5)
      (sampler_field): ZeroSampler2D()
      (sampler_wavelength): LinspaceSampler1D(N=5)
      (material): NonDispersiveMaterial(n=1.0002700090408325)
      (geometry): ObjectAtInfinityGeometry3D()
    )
  )
  (1): Gap()
  (2): Sequential(
    (0): RefractiveSurface(
      (collision_surface): CollisionSurface()
      (material): NonDispersiveMaterial(n=1.5169999599456787)
    )
    (1): Gap()
    (2): RefractiveSurface(
      (collision_surface): CollisionSurface()
      (material): NonDispersiveMaterial(n=1.6490000486373901)
    )
    (3): Gap()
    (4): RefractiveSurface(
      (collision_surface): CollisionSurface()
      (material): NonDispersiveMaterial(n=1.0002700090408325)
    )
  )
)
python
scene = tlm.new_scene("2D")

# solution1: modules define their artist, rendering still happens in the artist object
# solution2: move artist code to module

tlm.display_scene(scene)