OptiKit


NameOptiKit JSON
Version 0.1.1a11 PyPI version JSON
download
home_pagehttps://github.com/ARMANDOMTZ05/OptiKit
SummaryA basic optics module
upload_time2024-09-02 22:05:39
maintainerNone
docs_urlNone
authorArmando Martinez
requires_python>=3.10
licenseMIT License
keywords numpy optics holography slm python3 wavefront shaping
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # OptiKit

<p align="center">
  <img src="https://raw.githubusercontent.com/ARMANDOMTZ05/OptiKit/main/resources/OptiKit.png"  width="50%"/>
</p>

## Summary
This Python module provides a comprehensive suite of tools for studying and applying optics principles, particularly focusing on wave optics. The module is designed to generate families of solutions to the paraxial wave equation, which is fundamental in understanding the behavior of light in optical systems. Additionally, it includes functionalities for hologram generation, light propagation, and analysis of Stokes parameters, which describe the polarization state of light. These tools are essential for research and applications in optical engineering, laser physics, and related fields.

Solutions to the paraxial wave equation in various coordinate systems.
* Hermite-Gaussian Modes in cartesian coordinates
* Laguerre-Gaussian Modes in cylindrical coordinates
* Ince-Gaussian Modes in elyptical coordinates


## Library installation

### Requirements

* numpy
* pillow
* scipy
* matplotlib
* python >= 3.10

```
pip install optikit
```

## Gaussian Modes
$U(r, \theta, z) = \frac{\omega_0}{\omega(z)}\exp{\frac{-r^2}{\omega(z)^2}} \exp{\left(-i\left(kz + k\frac{r^2}{2R(z)} - \Psi(z) \right)\right)}$

where r is the radius, $\omega_0$ represents the beam width at $z = 0$, $\omega(z) = \omega_0\sqrt{1 + z^2/z_R^2}$ describes the beam width, $R(z) = z + z^2_R/z$ is the radius of curvature of the phase front, $z_R = k\omega_0^2/2$ is the Rayleigh range and $\Psi = arctan(z/z_R)$ is the Gouy shift.

### Code implementation
```
from optikit.Beam import Beam

Gauss = Beam(type = 'Gaussian',
            size = 5e-3, # in meters
            shape = 501, # Number of points
            w0 = 1e-3, # Beam width
            k = (2*np.pi/632.8e-9), # wavenumber
            z = 0)
Gauss.plot_amplitude()
```

## Ince-Gaussian Modes
The Ince-Gaussian (IG) mode is a solution to the paraxial wave equation expressed in elliptic coordinates $(\xi, \eta)$. The general form of an Ince-Gaussian beam $(\xi, \eta, z)$ can be written as:

$\text{IG}_{p,m}^e(\mathbf{r}, \epsilon) = \frac{C\omega_0}{\omega(z)}C_p^m(i\xi, \epsilon)C_p^m(\eta, \epsilon)\exp\left[\frac{-r^2}{\omega^2(z)}\right] \exp\left(i\left[kz + \frac{kr^2}{2R(z)} - (p - 1) \Psi(z)\right]\right)$,

$\text{IG}_{p,m}^o(\mathbf{r}, \epsilon) = \frac{S\omega_0}{\omega(z)}S_p^m(i\xi, \epsilon)S_p^m(\eta, \epsilon)\exp\left[\frac{-r^2}{\omega^2(z)}\right] \exp\left(i\left[kz + \frac{kr^2}{2R(z)} - (p - 1) \Psi(z)\right]\right)$

where r is the radius, $\omega_0$ represents the beam width at $z = 0$, $\omega(z) = \omega_0\sqrt{1 + z^2/z_R^2}$ describes the beam width, $R(z) = z + z^2_R/z$ is the radius of curvature of the phase front, $z_R = k\omega_0^2/2$ is the Rayleigh range and $\Psi = arctan(z/z_R)$ is the Gouy shift. C and S are normalization constants and the superindices $e$ and $o$ refer to even and odd modes, respectively.


### Code implementation

```
from optikit.Beam import Beam

Ince = Beam(type = 'InceGaussian',
            size = 5e-3, 
            shape = 501,
            parity = 0,
            p = 2,
            m = 2,
            e = 2,            
            w0 = 1e-3, 
            k = (2*np.pi/632.8e-9),
            z = 0)
Ince.plot_amplitude()
```

<p align="center">
  <img src= "https://raw.githubusercontent.com/ARMANDOMTZ05/OptiKit/main/resources/InceGauss.JPG"  width="30%"/>
</p>

Created using a DMD

## Laguerre-Gaussian modes

$\text{LG}_{p}^l(r, \phi, z) = \frac{1}{w(z)} \sqrt{\frac{2p!}{\pi (p + |l|)!}} \left(\frac{\sqrt{2} r}{\omega(z)}\right)^{|l|} L_p^{|l|}\left(\frac{2r^2}{\omega(z)^2}\right) \exp\left(-\frac{r^2}{\omega(z)^2}\right) \exp\left(-i \left(k z + k \frac{r^2}{2 R(z)} - l \phi - (2p + |l| + 1)\Psi(z)\right)\right)$

where r is the radius, $\omega_0$ represents the beam width at $z = 0$, $\omega(z) = \omega_0\sqrt{1 + z^2/z_R^2}$ describes the beam width, $R(z) = z + z^2_R/z$ is the radius of curvature of the phase front, $z_R = k\omega_0^2/2$ is the Rayleigh range and $\Psi = arctan(z/z_R)$ is the Gouy shift.

### Code implementation
```
from optikit.Beam import Beam

Lag = Beam(type = 'LaguerreGauss',
            size = 5e-3, 
            shape = 501,
            p = 2,
            l = 2,         
            w0 = 1e-3, 
            k = (2*np.pi/632.8e-9),
            z = 0)
Lag.plot_amplitude()
```

## Hermite-Gaussian modes

$\text{HG}_{m}^n(x, y, z) = \frac{1}{w(z)} \sqrt{\frac{2}{\pi \, 2^{n+m} \, n! \, m!}} \, H_n\left(\frac{\sqrt{2} \, x}{w(z)}\right) H_m\left(\frac{\sqrt{2} \, y}{w(z)}\right) \exp\left(-\frac{x^2 + y^2}{w(z)^2}\right) \exp\left(-i \left(k z + (n + m + 1) \Psi(z) - \frac{k (x^2 + y^2)}{2 R(z)}\right)\right)$

where r is the radius, $\omega_0$ represents the beam width at $z = 0$, $\omega(z) = \omega_0\sqrt{1 + z^2/z_R^2}$ describes the beam width, $R(z) = z + z^2_R/z$ is the radius of curvature of the phase front, $z_R = k\omega_0^2/2$ is the Rayleigh range and $\Psi = arctan(z/z_R)$ is the Gouy shift.

### Code implementation

```
from optikit.Beam import Beam

Herm = Beam(type = 'HermiteGaussian',
            size = 5e-3, 
            shape = 501,
            n = 2,
            m = 2,          
            w0 = 1e-3, 
            k = (2*np.pi/632.8e-9),
            z = 0)
Herm.plot_amplitude()
```

## Hologram generation
The [slmpy](https://github.com/wavefrontshaping/slmPy/tree/master) module can be used to project the holograms in a SLM, the code implementation should be as bellow:

```
from optikit.Beam import Beam
import slmpy

Ince = Beam(type = 'InceGaussian',
            size = 5e-3, 
            shape = 501,
            parity = 0,
            p = 2,
            m = 2,
            e = 2,            
            w0 = 1e-3, 
            k = (2*np.pi/632.8e-9),
            z = 0)

slm = slmpy.SLMdisplay()
Hologram = Ince.Beam.Hologam(gamma=np.pi/3000, theta = np.pi/4, save= True)
slm.updateArray(Hologram)

```
## Propagator
The equation is solve numericaly by applying a transfer function.

$U(z) = \\mathfrak{F}^{-1}\\left\\{H\\cdot \\mathfrak{F}\\{U_0\\}\\right\\}$

where $H = \exp\left(-i kz\sqrt{k_0^2 -\left(k_x^2+k_y^2\right)}\right)$ and $U_0$ represents the initial field.

### Code implementation
The `Propagator` class supports as an input a `np.ndarray` ans `OptiKit.Beam` class

```
from optikit.optics import propagator
from optikit.Beam import Beam

Gauss = Beam(type = 'Gaussian',
            size = 2e-3, 
            shape = 2**8, 
            w0 = 1e-3, 
            k = (2*np.pi/632.8e-9),
            z = 0)

Gauss.plot_amplitude()
Gauss_z = Propagator(beam= Gauss)
Gauss_z.propagate(zi = 1/2 * (2*np.pi/632.8e-9) * (1e-3 ** 2) , zn = 2**8)
Gauss_z.plot()
```

## Stokes parameters
A classical way to measure the stokes paramters is the following:

| Polarizer axis angle| Wave plate fast axis angle| Power Measurement|
|---------------------|---------------------------|------------------|
| $0°$                | -                         | $P_1$            |
| $90°$               | -                         | $P_2$            |
| $45°$               | -                         | $P_3$            |
| $45°$               | $0°$                      | $P_4$            |

### Stokes equations
* $S_0 = P_1 + P_2$
* $S_1 = P_1 - P_2$
* $S_2 = 2P_3 - S_0$
* $S_3 = S_0 - 2P_4$

### Ellipse Parameters
* $\psi = \frac{1}{2}\text{arctan}\left(\frac{S_2}{S_1}\right)$
* $E_{ox} = \sqrt{0.5(S_0 + S_1)}$
* $E_{oy} = \sqrt{0.5(S_0 - S_1)}$

### Example
<p align="center">
  <img src="https://raw.githubusercontent.com/ARMANDOMTZ05/OptiKit/main/resources/Polarization.png"  width="30%"/>
</p>

## References

[1] R. W. Gerchberg and W. O. Saxton, “A practical algorithm for the determination of the phase from image and diffraction plane pictures”, Optik 35, 237 (1972).

[2] K. Mitchell, S. Turtaev, M. Padgett, T. Cizmár, and D. Phillips, “High-speed spatial control of the intensity, phase and polarisation of vector beams using a digital micro-mirror device”, Opt. Express 24, 29269-29282 (2016).

[3] Forbes A. 2014, Laser Beam Propagation: Generation and Propagation of Customized Light (London: Taylor and Francis).

[4] Bandres MA, Gutiérrez-Vega JC. Ince-Gaussian modes of the paraxial wave equation and stable resonators. J Opt Soc Am A Opt Image Sci Vis. 2004 May;21(5):873-80. doi: 10.1364/josaa.21.000873. PMID: 15139441.

[5] Beth Schaefer, Edward Collett, Robert Smyth, Daniel Barrett, and Beth Fraher "Measuring the Stokes polarization parameters," Am. J. Phys. 75, 163-168 (2007).

[6] Siegman, A. E. (1986). Lasers. Taiwan: University Science Books.

[7] Vallone, Giuseppe. (2015). On the properties of circular beams: normalization, Laguerre–Gauss expansion, and free-space divergence. Optics Letters. 40. 10.1364/OL.40.001717. 

[8] Capps DM. Derivation and application of a Green function propagator suitable for nonparaxial propagation over a two-dimensional domain. J Opt Soc Am A Opt Image Sci Vis. 2019 Apr 1;36(4):563-577. doi: 10.1364/JOSAA.36.000563. PMID: 31044976.

## To do

This project is still in development. New features will be added in upcoming versions.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/ARMANDOMTZ05/OptiKit",
    "name": "OptiKit",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "numpy, optics, holography, slm, python3, wavefront shaping",
    "author": "Armando Martinez",
    "author_email": "ar.martinez.hdz@hotmail.com",
    "download_url": "https://files.pythonhosted.org/packages/a6/6a/0abf8d4891ec902270b29b8cd1de7c4e3aa4c68341d227bf54677379349d/optikit-0.1.1a11.tar.gz",
    "platform": null,
    "description": "# OptiKit\r\n\r\n<p align=\"center\">\r\n  <img src=\"https://raw.githubusercontent.com/ARMANDOMTZ05/OptiKit/main/resources/OptiKit.png\"  width=\"50%\"/>\r\n</p>\r\n\r\n## Summary\r\nThis Python module provides a comprehensive suite of tools for studying and applying optics principles, particularly focusing on wave optics. The module is designed to generate families of solutions to the paraxial wave equation, which is fundamental in understanding the behavior of light in optical systems. Additionally, it includes functionalities for hologram generation, light propagation, and analysis of Stokes parameters, which describe the polarization state of light. These tools are essential for research and applications in optical engineering, laser physics, and related fields.\r\n\r\nSolutions to the paraxial wave equation in various coordinate systems.\r\n* Hermite-Gaussian Modes in cartesian coordinates\r\n* Laguerre-Gaussian Modes in cylindrical coordinates\r\n* Ince-Gaussian Modes in elyptical coordinates\r\n\r\n\r\n## Library installation\r\n\r\n### Requirements\r\n\r\n* numpy\r\n* pillow\r\n* scipy\r\n* matplotlib\r\n* python >= 3.10\r\n\r\n```\r\npip install optikit\r\n```\r\n\r\n## Gaussian Modes\r\n$U(r, \\theta, z) = \\frac{\\omega_0}{\\omega(z)}\\exp{\\frac{-r^2}{\\omega(z)^2}} \\exp{\\left(-i\\left(kz + k\\frac{r^2}{2R(z)} - \\Psi(z) \\right)\\right)}$\r\n\r\nwhere r is the radius, $\\omega_0$ represents the beam width at $z = 0$, $\\omega(z) = \\omega_0\\sqrt{1 + z^2/z_R^2}$ describes the beam width, $R(z) = z + z^2_R/z$ is the radius of curvature of the phase front, $z_R = k\\omega_0^2/2$ is the Rayleigh range and $\\Psi = arctan(z/z_R)$ is the Gouy shift.\r\n\r\n### Code implementation\r\n```\r\nfrom optikit.Beam import Beam\r\n\r\nGauss = Beam(type = 'Gaussian',\r\n            size = 5e-3, # in meters\r\n            shape = 501, # Number of points\r\n            w0 = 1e-3, # Beam width\r\n            k = (2*np.pi/632.8e-9), # wavenumber\r\n            z = 0)\r\nGauss.plot_amplitude()\r\n```\r\n\r\n## Ince-Gaussian Modes\r\nThe Ince-Gaussian (IG) mode is a solution to the paraxial wave equation expressed in elliptic coordinates $(\\xi, \\eta)$. The general form of an Ince-Gaussian beam $(\\xi, \\eta, z)$ can be written as:\r\n\r\n$\\text{IG}_{p,m}^e(\\mathbf{r}, \\epsilon) = \\frac{C\\omega_0}{\\omega(z)}C_p^m(i\\xi, \\epsilon)C_p^m(\\eta, \\epsilon)\\exp\\left[\\frac{-r^2}{\\omega^2(z)}\\right] \\exp\\left(i\\left[kz + \\frac{kr^2}{2R(z)} - (p - 1) \\Psi(z)\\right]\\right)$,\r\n\r\n$\\text{IG}_{p,m}^o(\\mathbf{r}, \\epsilon) = \\frac{S\\omega_0}{\\omega(z)}S_p^m(i\\xi, \\epsilon)S_p^m(\\eta, \\epsilon)\\exp\\left[\\frac{-r^2}{\\omega^2(z)}\\right] \\exp\\left(i\\left[kz + \\frac{kr^2}{2R(z)} - (p - 1) \\Psi(z)\\right]\\right)$\r\n\r\nwhere r is the radius, $\\omega_0$ represents the beam width at $z = 0$, $\\omega(z) = \\omega_0\\sqrt{1 + z^2/z_R^2}$ describes the beam width, $R(z) = z + z^2_R/z$ is the radius of curvature of the phase front, $z_R = k\\omega_0^2/2$ is the Rayleigh range and $\\Psi = arctan(z/z_R)$ is the Gouy shift. C and S are normalization constants and the superindices $e$ and $o$ refer to even and odd modes, respectively.\r\n\r\n\r\n### Code implementation\r\n\r\n```\r\nfrom optikit.Beam import Beam\r\n\r\nInce = Beam(type = 'InceGaussian',\r\n            size = 5e-3, \r\n            shape = 501,\r\n            parity = 0,\r\n            p = 2,\r\n            m = 2,\r\n            e = 2,            \r\n            w0 = 1e-3, \r\n            k = (2*np.pi/632.8e-9),\r\n            z = 0)\r\nInce.plot_amplitude()\r\n```\r\n\r\n<p align=\"center\">\r\n  <img src= \"https://raw.githubusercontent.com/ARMANDOMTZ05/OptiKit/main/resources/InceGauss.JPG\"  width=\"30%\"/>\r\n</p>\r\n\r\nCreated using a DMD\r\n\r\n## Laguerre-Gaussian modes\r\n\r\n$\\text{LG}_{p}^l(r, \\phi, z) = \\frac{1}{w(z)} \\sqrt{\\frac{2p!}{\\pi (p + |l|)!}} \\left(\\frac{\\sqrt{2} r}{\\omega(z)}\\right)^{|l|} L_p^{|l|}\\left(\\frac{2r^2}{\\omega(z)^2}\\right) \\exp\\left(-\\frac{r^2}{\\omega(z)^2}\\right) \\exp\\left(-i \\left(k z + k \\frac{r^2}{2 R(z)} - l \\phi - (2p + |l| + 1)\\Psi(z)\\right)\\right)$\r\n\r\nwhere r is the radius, $\\omega_0$ represents the beam width at $z = 0$, $\\omega(z) = \\omega_0\\sqrt{1 + z^2/z_R^2}$ describes the beam width, $R(z) = z + z^2_R/z$ is the radius of curvature of the phase front, $z_R = k\\omega_0^2/2$ is the Rayleigh range and $\\Psi = arctan(z/z_R)$ is the Gouy shift.\r\n\r\n### Code implementation\r\n```\r\nfrom optikit.Beam import Beam\r\n\r\nLag = Beam(type = 'LaguerreGauss',\r\n            size = 5e-3, \r\n            shape = 501,\r\n            p = 2,\r\n            l = 2,         \r\n            w0 = 1e-3, \r\n            k = (2*np.pi/632.8e-9),\r\n            z = 0)\r\nLag.plot_amplitude()\r\n```\r\n\r\n## Hermite-Gaussian modes\r\n\r\n$\\text{HG}_{m}^n(x, y, z) = \\frac{1}{w(z)} \\sqrt{\\frac{2}{\\pi \\, 2^{n+m} \\, n! \\, m!}} \\, H_n\\left(\\frac{\\sqrt{2} \\, x}{w(z)}\\right) H_m\\left(\\frac{\\sqrt{2} \\, y}{w(z)}\\right) \\exp\\left(-\\frac{x^2 + y^2}{w(z)^2}\\right) \\exp\\left(-i \\left(k z + (n + m + 1) \\Psi(z) - \\frac{k (x^2 + y^2)}{2 R(z)}\\right)\\right)$\r\n\r\nwhere r is the radius, $\\omega_0$ represents the beam width at $z = 0$, $\\omega(z) = \\omega_0\\sqrt{1 + z^2/z_R^2}$ describes the beam width, $R(z) = z + z^2_R/z$ is the radius of curvature of the phase front, $z_R = k\\omega_0^2/2$ is the Rayleigh range and $\\Psi = arctan(z/z_R)$ is the Gouy shift.\r\n\r\n### Code implementation\r\n\r\n```\r\nfrom optikit.Beam import Beam\r\n\r\nHerm = Beam(type = 'HermiteGaussian',\r\n            size = 5e-3, \r\n            shape = 501,\r\n            n = 2,\r\n            m = 2,          \r\n            w0 = 1e-3, \r\n            k = (2*np.pi/632.8e-9),\r\n            z = 0)\r\nHerm.plot_amplitude()\r\n```\r\n\r\n## Hologram generation\r\nThe [slmpy](https://github.com/wavefrontshaping/slmPy/tree/master) module can be used to project the holograms in a SLM, the code implementation should be as bellow:\r\n\r\n```\r\nfrom optikit.Beam import Beam\r\nimport slmpy\r\n\r\nInce = Beam(type = 'InceGaussian',\r\n            size = 5e-3, \r\n            shape = 501,\r\n            parity = 0,\r\n            p = 2,\r\n            m = 2,\r\n            e = 2,            \r\n            w0 = 1e-3, \r\n            k = (2*np.pi/632.8e-9),\r\n            z = 0)\r\n\r\nslm = slmpy.SLMdisplay()\r\nHologram = Ince.Beam.Hologam(gamma=np.pi/3000, theta = np.pi/4, save= True)\r\nslm.updateArray(Hologram)\r\n\r\n```\r\n## Propagator\r\nThe equation is solve numericaly by applying a transfer function.\r\n\r\n$U(z) = \\\\mathfrak{F}^{-1}\\\\left\\\\{H\\\\cdot \\\\mathfrak{F}\\\\{U_0\\\\}\\\\right\\\\}$\r\n\r\nwhere $H = \\exp\\left(-i kz\\sqrt{k_0^2 -\\left(k_x^2+k_y^2\\right)}\\right)$ and $U_0$ represents the initial field.\r\n\r\n### Code implementation\r\nThe `Propagator` class supports as an input a `np.ndarray` ans `OptiKit.Beam` class\r\n\r\n```\r\nfrom optikit.optics import propagator\r\nfrom optikit.Beam import Beam\r\n\r\nGauss = Beam(type = 'Gaussian',\r\n            size = 2e-3, \r\n            shape = 2**8, \r\n            w0 = 1e-3, \r\n            k = (2*np.pi/632.8e-9),\r\n            z = 0)\r\n\r\nGauss.plot_amplitude()\r\nGauss_z = Propagator(beam= Gauss)\r\nGauss_z.propagate(zi = 1/2 * (2*np.pi/632.8e-9) * (1e-3 ** 2) , zn = 2**8)\r\nGauss_z.plot()\r\n```\r\n\r\n## Stokes parameters\r\nA classical way to measure the stokes paramters is the following:\r\n\r\n| Polarizer axis angle| Wave plate fast axis angle| Power Measurement|\r\n|---------------------|---------------------------|------------------|\r\n| $0\u00b0$                | -                         | $P_1$            |\r\n| $90\u00b0$               | -                         | $P_2$            |\r\n| $45\u00b0$               | -                         | $P_3$            |\r\n| $45\u00b0$               | $0\u00b0$                      | $P_4$            |\r\n\r\n### Stokes equations\r\n* $S_0 = P_1 + P_2$\r\n* $S_1 = P_1 - P_2$\r\n* $S_2 = 2P_3 - S_0$\r\n* $S_3 = S_0 - 2P_4$\r\n\r\n### Ellipse Parameters\r\n* $\\psi = \\frac{1}{2}\\text{arctan}\\left(\\frac{S_2}{S_1}\\right)$\r\n* $E_{ox} = \\sqrt{0.5(S_0 + S_1)}$\r\n* $E_{oy} = \\sqrt{0.5(S_0 - S_1)}$\r\n\r\n### Example\r\n<p align=\"center\">\r\n  <img src=\"https://raw.githubusercontent.com/ARMANDOMTZ05/OptiKit/main/resources/Polarization.png\"  width=\"30%\"/>\r\n</p>\r\n\r\n## References\r\n\r\n[1] R. W. Gerchberg and W. O. Saxton, \u201cA practical algorithm for the determination of the phase from image and di\ufb00raction plane pictures\u201d, Optik 35, 237 (1972).\r\n\r\n[2] K. Mitchell, S. Turtaev, M. Padgett, T. Cizm\u00e1r, and D. Phillips, \u201cHigh-speed spatial control of the intensity, phase and polarisation of vector beams using a digital micro-mirror device\u201d, Opt. Express 24, 29269-29282 (2016).\r\n\r\n[3] Forbes A. 2014, Laser Beam Propagation: Generation and Propagation of Customized Light (London: Taylor and Francis).\r\n\r\n[4] Bandres MA, Guti\u00e9rrez-Vega JC. Ince-Gaussian modes of the paraxial wave equation and stable resonators. J Opt Soc Am A Opt Image Sci Vis. 2004 May;21(5):873-80. doi: 10.1364/josaa.21.000873. PMID: 15139441.\r\n\r\n[5] Beth Schaefer, Edward Collett, Robert Smyth, Daniel Barrett, and Beth Fraher \"Measuring the Stokes polarization parameters,\" Am. J. Phys. 75, 163-168 (2007).\r\n\r\n[6] Siegman,\u00a0A.\u00a0E.\u00a0(1986).\u00a0Lasers.\u00a0Taiwan:\u00a0University Science Books.\r\n\r\n[7] Vallone, Giuseppe. (2015). On the properties of circular beams: normalization, Laguerre\u2013Gauss expansion, and free-space divergence. Optics Letters. 40. 10.1364/OL.40.001717. \r\n\r\n[8] Capps DM. Derivation and application of a Green function propagator suitable for nonparaxial propagation over a two-dimensional domain. J Opt Soc Am A Opt Image Sci Vis. 2019 Apr 1;36(4):563-577. doi: 10.1364/JOSAA.36.000563. PMID: 31044976.\r\n\r\n## To do\r\n\r\nThis project is still in development. New features will be added in upcoming versions.\r\n",
    "bugtrack_url": null,
    "license": "MIT License",
    "summary": "A basic optics module",
    "version": "0.1.1a11",
    "project_urls": {
        "Homepage": "https://github.com/ARMANDOMTZ05/OptiKit"
    },
    "split_keywords": [
        "numpy",
        " optics",
        " holography",
        " slm",
        " python3",
        " wavefront shaping"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "96db6bbb7f79ed84f1d3881a1180debf2edfa3f72584247f88acef563fbc3285",
                "md5": "82fee9365b081997340f86dea0119c13",
                "sha256": "a582158f5ace5b7440d1a640e914ab8448d4fa523a79740f642da9aebeee70fd"
            },
            "downloads": -1,
            "filename": "OptiKit-0.1.1a11-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "82fee9365b081997340f86dea0119c13",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 19463,
            "upload_time": "2024-09-02T22:05:38",
            "upload_time_iso_8601": "2024-09-02T22:05:38.027027Z",
            "url": "https://files.pythonhosted.org/packages/96/db/6bbb7f79ed84f1d3881a1180debf2edfa3f72584247f88acef563fbc3285/OptiKit-0.1.1a11-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a66a0abf8d4891ec902270b29b8cd1de7c4e3aa4c68341d227bf54677379349d",
                "md5": "06e9f706a92769888eb80301d24ad803",
                "sha256": "ff5f730311b91b0955cbb16d30dfcc3dddeee640ebaac3fd89c83957e5967713"
            },
            "downloads": -1,
            "filename": "optikit-0.1.1a11.tar.gz",
            "has_sig": false,
            "md5_digest": "06e9f706a92769888eb80301d24ad803",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 14139,
            "upload_time": "2024-09-02T22:05:39",
            "upload_time_iso_8601": "2024-09-02T22:05:39.344598Z",
            "url": "https://files.pythonhosted.org/packages/a6/6a/0abf8d4891ec902270b29b8cd1de7c4e3aa4c68341d227bf54677379349d/optikit-0.1.1a11.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-09-02 22:05:39",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ARMANDOMTZ05",
    "github_project": "OptiKit",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "optikit"
}
        
Elapsed time: 0.44650s