{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# OSLO and the Single Lens - Part 2\n", "\n", "**EE/PHY 448/548**\n", "\n", "**Scott Prahl**\n", "\n", "**Nov 2019, Version 3**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overview\n", "\n", "This is the second part of a tutorial that covers OSLO basics; specifically, how to enter lens data into OSLO. In particular, it explains how to set the size of the object and select rays to be traced.\n", "\n", "* The [FAQ](https://omlc.org/classroom/oslotut/faq.html) may give you a hint or two that will make the OSLO experience a bit less horrible.\n", "\n", "* The [first part](https://omlc.org/classroom/oslotut/simple/simple.html) of this tutorial should have gotten you to the point of entering most of the lens data into the `Surface Data` spreadsheet. \n", "\n", "* This tutorial is one from a list of [other tutorials](https://omlc.org/classroom/oslotut/index.html) that are available." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## New ideas\n", "\n", "* Setting the index of refaction\n", "\n", "* Using `Pickup` to automatically update cells\n", "\n", "* Using `Setup` to set the object height\n", "\n", "* Using `Autofocus - paraxial` to automatically focus\n", "\n", "* Force drawing of surfaces\n", "\n", "* Set the height of an object\n", "\n", "* Selecting the rays to be traced\n", "\n", "* Modifying the entrance beam diameter\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Problem\n", "\n", "The problem is to ray trace light from an object through a biconvex lens to the image plane.\n", "\n", "\"Biconvex\n", "\n", "* The focal length of the lens should be 50mm \n", "* The index of refraction of the lens is 1.5\n", "* The object is 100mm from the lens. \n", "* The object height is 15\n", "* The lens diameter is 38mm\n", "* The lens thickness is 8mm\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setting the index of refraction\n", "\n", "Instead of using a real glass with chromatic dispersion, we want this lens to have an index of refraction equal to 1.5\n", "\n", "Specifically this means that the first surface `AST` should have an index of refraction of 1.5. To do this, click on the button in the glass column of the `AST` line. Select `Direct...` from the pop-up menu and you'll see\n", "\n", "\"Refractive\n", "\n", "where I have already changed the refractive index at each wavelength to 1.5. Click the green check box in the upper left hand corner of the dialog box and your `Surface Data` spreadsheet should look like\n", "\n", "\"starting\n", "\n", "\n", ">The three wavelength are traditional optical design wavelengths and correspond to easily obtained [Fraunhofer emission lines](https://en.wikipedia.org/wiki/Fraunhofer_lines) for green, blue, and red light.\n", "\n", "\n", " \n", " \n", " \n", "
Helium d-line587.56nmGreen
Hydrogen F-line486.13nmBlue
Hydrogen C-line656.27nmRed
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Drawing the Optical System\n", "\n", "Click on the `Draw Off` button\n", "\n", "You should now see something like\n", " \n", "\"System\n", "\n", "So far, so good. However, \n", "\n", "* the focal length of the lens is not 50mm \n", "* the object is not visible\n", "* the image is not apparent\n", "* the rays are smushed together\n", "\n", "Let's fix each of these in turn." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fixing the focal length\n", "\n", "The easiest way to get the focal length to be 50mm is to change the curvature of the lenses. Because this lens is equi-convex, we'll modify one of the radii of curvatures to automatically be entered as the negative of the first surface radius of curvature.\n", "\n", "To do this, click on the button in the `RADIUS` column of the row numbered `2`. Select `Minus Curvature Pickup` and answer `1` when asked to `Enter the pickup source surface` and then click OK for the next two dialog boxes.\n", "\n", "\"System\n", "\n", "Now when you change the `RADIUS` of first surface (the `AST` surface), the `RADIUS` of the second surface will automatically get updated. Try this.\n", "\n", "Now repeatedly change the radius until you obtain an effective focal length to be 50mm as shown below.\n", "\n", "\"System\n", " \n", "Now, in a sense, you have designed your first lens. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Telling OSLO to Show the Object and Image\n", "\n", "To force OSLO to show the `OBJ` and `IMS` surface, one uses the button in the `SPECIAL` column.\n", "\n", "In the `OBJ` row click the button and navigate `Surface Control (F) -> General` to get the following dialog box\n", "\n", "\"curvature\n", "\n", "Change the appearance from `Automatic` to `Drawn`\n", "\n", "Do the same for the `IMS` surface. The drawing should look like\n", "\n", "\"system\n", "\n", "and the `Surface Data` spreadsheet should look like\n", "\n", "\"surface\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Increasing the object size\n", "\n", "You cannot change the object height (`APERTURE RADIUS`) by just clicking and entering the object height. Instead, you must click the `Setup` button in the `Surface Data` window. Here there is a place to specify the object height.\n", "\n", "\"height\n", "\n", "After entering the object height as 15mm, the `Surface Data` spreadsheet should be \n", "\n", "\"data\n", "\n", "the system should look like\n", "\n", "\"system\n", "\n", "Now this is close to the desired system layout. The object is imaged nicely at the image plane that is 100 mm from the back surface of the lens.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using more of the lens\n", "\n", "In the image above, only the most central rays are shown. How do we trace rays through the top and bottom of the lens?\n", "\n", "This is a 38mm lens with a 19mm aperture. What if we want to see rays at 15mm from the center?\n", "\n", "The trick here is to change the `Ent beam radius` (entering beam radius) to 15mm. (This is the radius for a ray in the aperture plane --- in this example the first surface.)\n", "\n", "Now the `Surface Data` spreadsheet should be \n", "\n", "\"data\n", "\n", "the system should look like\n", "\n", "\"system\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Changing the rays that are drawn\n", "\n", "What if we just want to trace a bunch of rays from the top of the object? In this case the `Surface Data` spreadsheet should be \n", "\n", "Go to the `Lens` menu and select `Lens Drawing Conditions ...` to get the following dialog box. \n", "\n", "\"data\n", "\n", "By changing boxes in yellow, you can obtain the following drawing that draws seven rays from the top of the object\n", "\n", "\"system\n", "\n", "These rays do not cross at the image plane like the paraxial ones did. Spherical aberrations are really big. This is why small F# lenses (ratio of focal length to aperture diameter) that focus well are expensive." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Next steps\n", "\n", "The \n", "next tutorial will cover the basics of mirrors.\n", "\n", "The \n", "next tutorial will introduce OSLO optimizations.\n", "\n", "This document is also available as a Jupyter notebook as\n", "simple2.ipynb. \n", "\n", "
\n", "\n", "© 2019 Scott Prahl\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 1 }