Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update object angle/CRA according to image size #12

Open
MaximilianHoffmann opened this issue Nov 3, 2016 · 6 comments
Open

Update object angle/CRA according to image size #12

MaximilianHoffmann opened this issue Nov 3, 2016 · 6 comments

Comments

@MaximilianHoffmann
Copy link

Is this already possible or even desired? For me it would be helpful for designing a lens with a certain FOV.

@jordens
Copy link
Member

jordens commented Nov 3, 2016

An InfiniteConjugate is specified by its object angle, i.e. FOV.
Do you want fixed object size and fixed angle? That's fixed object size and fixed distance to entrance pupil.

IIRC the code should be able to do that just fine.
If not, you should be able to do that with pickups or solves:

http://nbviewer.jupyter.org/github/jordens/rayopt-notebooks/blob/master/offner_relay.ipynb
https://github.com/jordens/rayopt/blob/12531617533e6722cc8889cea3a33e27845e3377/rayopt/test/test_raytrace.py#L50

@MaximilianHoffmann
Copy link
Author

MaximilianHoffmann commented Nov 3, 2016

That's fixed object size and fixed distance to entrance pupil.

Yes, just that I don't know which angle/distance to the pupil corresponds to a certain FOV before paraxial tracing. I saw the solve function in the tutorial but it wasn't so clear how to use it. I'll check it out.
I thought the problem to be a more generic one, e.g. I have collimated rays of a certain size (object size), and want a FOV (image size) of a certain size, what is the angle at the stop, which will correspond to this, but maybe its not.

@jordens
Copy link
Member

jordens commented Nov 4, 2016

But if you have a collimated input beam (i.e. an infinite conjugate) it should just do that.

import rayopt as ro

s = ro.system_from_yaml("""
object:
  type: infinite
  angle_deg: 10
  pupil:
    radius: 1
stop: 2
elements:
- {}
- {distance: 1, material: 1.5, roc: 5}
- {distance: .2, material: 1.0}
- {}
""")
s.update()
s.paraxial.resize()
print(s)
print(s.paraxial)
System: 
Scale: 1.0 mm
Wavelengths: 588, 656, 486 nm
Fields: 0, 0.7, 1
Object:
 Semi-Angle: 10 deg
 Pupil:
   Pupil Distance: 1.13514
   Radius: 1
Image:
 Radius: inf
 Update Radius: True
 Pupil:
   Pupil Distance: 0
   Update Radius: True
   Radius: inf
Stop: 2
Elements:
 # T   Distance   Rad Curv   Diameter          Material       n      nd      Vd
 0 S          0        inf        inf              None     nan     nan     nan
 1 S          1          5     2.0479                 -   1.500   1.500     inf
 2 S        0.2        inf     1.9733                 -   1.000   1.000     inf
 3 S          0        inf     1.9733              None     nan     nan     nan

lagrange: -0.17725
track length: 0.2
object, image height: [  2.0121e-01   3.7340e-17]
front, back focal length (from PP): [-10. 10.]
entry, exit pupil height: [ 1.      0.9867]
entry, exit pupil distance: [  1.3514e-01   2.0785e-16]
front, back focal distance: [-10.       9.8667]
front, back principal distance: [ -1.7764e-15  -1.3333e-01]
front, back nodal distance: [ -1.7764e-15  -1.3333e-01]
front, back numerical aperture: [ 0.      0.0995]
front, back f number: [ 5.      5.0676]
front, back working f number: [    inf  5.0249]
front, back airy radius: [    inf  0.0036]
transverse, angular magnification: [-0.      1.0135]

 # T      path         n   axial y  axial nu   chief y  chief nu
 0 S         0         1         1         0   -0.2012    0.1773
 1 S         1       1.5         1      -0.1  -0.02395    0.1796
 2 S       1.2         1    0.9867      -0.1-3.734e-17    0.1796
 3 S       1.2         1    0.9867      -0.1-3.734e-17    0.1796

 # T       SA3      CMA3      AST3      PTZ3      DIS3     TACHC      TCHC
 0 S         0         0         0         0         0         0         0
 1 S-1.873e-19-1.615e-19-1.392e-19-2.206e-19-3.103e-19         0         0
 2 S-5.774e-20 1.037e-19-1.863e-19         0 3.347e-19        -0         0
 3 S         0         0         0         0         0        -0         0
     -2.45e-19-5.775e-20-3.256e-19-2.206e-19 2.444e-20         0         0

@jordens
Copy link
Member

jordens commented Nov 4, 2016

Oh. Image size! I misread that.

@jordens
Copy link
Member

jordens commented Nov 4, 2016

It might be better to rewrite the paraxial trace so that it doesn't care about object height/chief ray angle and pupil height/marginal ray angle and instead just use "1" and just scale the printed data. Then you could always do the trace without ever hitting nans, then do solves/pickups on that data and then everything would always give the right result.

@jordens
Copy link
Member

jordens commented Nov 4, 2016

But for now i would just guess some initial value so that the primary trace gives you pupil data and then use a pickup to set the actual value.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants