Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
finesse
pykat
Commits
7624b78a
Commit
7624b78a
authored
Oct 18, 2016
by
Andreas Freise
Browse files
fixing spatial filter example, ading very simple phaseplate example
parent
ff2041ce
Changes
2
Hide whitespace changes
Inline
Side-by-side
examples/fft/phaseplate.py
0 → 100644
View file @
7624b78a
from
__future__
import
absolute_import
from
__future__
import
division
from
__future__
import
print_function
from
__future__
import
unicode_literals
import
matplotlib.pyplot
as
plt
from
pykat.optics.gaussian_beams
import
HG_mode
,
beam_param
from
pykat.optics.fft
import
*
import
numpy
as
np
import
scipy
def
main
():
print
(
"""
--------------------------------------------------------------
Example file for using PyKat http://www.gwoptics.org/pykat
Generate a HG11 mode from a HG00 mode with a simple
phase plate.
Andreas Freise, 18.10.2016
--------------------------------------------------------------
"""
)
plt
.
close
(
'all'
)
# wavelength
Lambda
=
1064.0E-9
# distance to propagate/focal length of lens
D
=
4
######## Generate Grid stucture required for FFT propagation ####
xpoints
=
512
ypoints
=
512
xsize
=
0.05
ysize
=
0.05
# Apply offset such that the center of the beam lies in the
# center of a grid tile
xoffset
=
-
0.5
*
xsize
/
xpoints
yoffset
=
-
0.5
*
ysize
/
ypoints
shape
=
grid
(
xpoints
,
ypoints
,
xsize
,
ysize
,
xoffset
,
yoffset
)
x
=
shape
.
xaxis
y
=
shape
.
yaxis
######## Generates input beam ################
gx
=
beam_param
(
w0
=
2e-3
,
z
=
0
)
gy
=
beam_param
(
w0
=
2e-3
,
z
=
0
)
beam
=
HG_mode
(
gx
,
gy
,
0
,
0
)
global
field
,
laser
field
=
beam
.
Unm
(
x
,
y
)
####### Apply phase plate #######################################
plate
=
np
.
ones
([
xpoints
,
ypoints
])
plate
[
0
:
xpoints
//
2
,
0
:
ypoints
//
2
]
=-
1.0
plate
[
xpoints
//
2
:
xpoints
,
ypoints
//
2
:
ypoints
]
=-
1.0
field2
=
field
*
plate
;
####### Propagates the field by FFT ##############################
field2
=
FFT_propagate
(
field2
,
shape
,
Lambda
,
D
,
1
)
# maybe apply a thin lens
f
=
D
field2
=
apply_thin_lens
(
field2
,
shape
,
Lambda
,
f
)
field2
=
FFT_propagate
(
field2
,
shape
,
Lambda
,
D
,
1
)
midx
=
(
xpoints
)
//
2
midy
=
(
ypoints
)
//
2
off1
=
50
off2
=
50
# plot hand tuned for certain ranges and sizes, not automtically scaled
fig
=
plt
.
figure
(
110
)
fig
.
clear
()
plt
.
subplot
(
1
,
3
,
1
)
plt
.
imshow
(
abs
(
field
))
plt
.
xlim
(
midx
-
off1
,
midx
+
off1
)
plt
.
ylim
(
midy
-
off1
,
midy
+
off1
)
plt
.
draw
()
plt
.
subplot
(
1
,
3
,
2
)
plt
.
imshow
(
plate
)
#pl.xlim(midx-off2,midx+off2)
#pl.ylim(midy-off2,midy+off2)
plt
.
draw
()
plt
.
subplot
(
1
,
3
,
3
)
plt
.
imshow
(
abs
(
field2
))
plt
.
xlim
(
midx
-
off2
,
midx
+
off2
)
plt
.
ylim
(
midy
-
off2
,
midy
+
off2
)
plt
.
draw
()
if
in_ipython
():
plt
.
show
(
block
=
0
)
else
:
plt
.
show
(
block
=
1
)
# testing if the script is run from within ipython
def
in_ipython
():
try
:
__IPYTHON__
except
NameError
:
return
False
else
:
return
True
if
__name__
==
'__main__'
:
main
()
examples/fft/spatial_filter.py
View file @
7624b78a
...
...
@@ -3,106 +3,119 @@ from __future__ import division
from
__future__
import
print_function
from
__future__
import
unicode_literals
import
pylab
as
pl
import
matplotlib.pyplot
as
pl
t
from
pykat.optics.gaussian_beams
import
HG_
beam
,
beam_param
from
pykat.optics.gaussian_beams
import
HG_
mode
,
beam_param
from
pykat.optics.fft
import
*
import
numpy
as
np
import
scipy
def
main
():
# wavelength
Lambda
=
1064.0E-9
# distance to propagate/focal length of lens
D
=
10
# mix coefficients
c1
=
0.7
c2
=
0.3
# mode indices
n1
=
2
m1
=
3
n2
=
1
m2
=
0
######## Generate Grid stucture required for FFT propagation ####
xpoints
=
512
ypoints
=
512
xsize
=
0.05
ysize
=
0.05
# Apply offset such that the center of the beam lies in the
# center of a grid tile
xoffset
=
-
0.5
*
xsize
/
xpoints
yoffset
=
-
0.5
*
ysize
/
ypoints
shape
=
grid
(
xpoints
,
ypoints
,
xsize
,
ysize
,
xoffset
,
yoffset
)
x
=
shape
.
xaxis
y
=
shape
.
yaxis
######## Generates a mixture of fields ################
gx
=
beam_param
(
w0
=
2e-3
,
z
=
0
)
gy
=
beam_param
(
w0
=
2e-3
,
z
=
0
)
beam
=
HG_beam
(
gx
,
gy
,
n1
,
m1
)
field1
=
beam
.
Unm
(
x
,
y
)
beam2
=
HG_beam
(
gx
,
gy
,
n2
,
m2
)
field2
=
beam2
.
Unm
(
x
,
y
)
global
field
,
laser1
,
laser2
field
=
np
.
sqrt
(
c1
)
*
field1
+
np
.
sqrt
(
c2
)
*
field2
print
(
"""
--------------------------------------------------------------
Example file for using PyKat http://www.gwoptics.org/pykat
Simple spatial filter to measure the mode content in a
Hermite Gauss beam
Andreas Freise, 18.10.2016
--------------------------------------------------------------
"""
)
plt
.
close
(
'all'
)
# wavelength
Lambda
=
1064.0E-9
# distance to propagate/focal length of lens
D
=
10
# mix coefficients
c1
=
0.7
c2
=
0.3
# mode indices
n1
=
2
m1
=
3
n2
=
1
m2
=
0
######## Generate Grid stucture required for FFT propagation ####
xpoints
=
512
ypoints
=
512
xsize
=
0.05
ysize
=
0.05
# Apply offset such that the center of the beam lies in the
# center of a grid tile
xoffset
=
-
0.5
*
xsize
/
xpoints
yoffset
=
-
0.5
*
ysize
/
ypoints
global
shape
shape
=
grid
(
xpoints
,
ypoints
,
xsize
,
ysize
,
xoffset
,
yoffset
)
x
=
shape
.
xaxis
y
=
shape
.
yaxis
######## Generates a mixture of fields ################
gx
=
beam_param
(
w0
=
2e-3
,
z
=
0
)
gy
=
beam_param
(
w0
=
2e-3
,
z
=
0
)
beam
=
HG_mode
(
gx
,
gy
,
n1
,
m1
)
field1
=
beam
.
Unm
(
x
,
y
)
beam2
=
HG_mode
(
gx
,
gy
,
n2
,
m2
)
field2
=
beam2
.
Unm
(
x
,
y
)
global
field
,
laser1
,
laser2
field
=
np
.
sqrt
(
c1
)
*
field1
+
np
.
sqrt
(
c2
)
*
field2
####### Apply phase plate #######################################
laser1
=
field
*
(
np
.
conjugate
(
field1
))
laser2
=
field
*
(
np
.
conjugate
(
field2
))
####### Propagates the field by FFT ##############################
laser1
=
FFT_propagate
(
laser1
,
shape
,
Lambda
,
D
,
1
)
laser2
=
FFT_propagate
(
laser2
,
shape
,
Lambda
,
D
,
1
)
f
=
D
#laser1 = apply_lens(laser1, shape, Lambda, f)
#laser2 = apply_lens(laser2, shape, Lambda, f)
laser1
=
apply_thin_lens
(
laser1
,
shape
,
Lambda
,
f
)
laser2
=
apply_thin_lens
(
laser2
,
shape
,
Lambda
,
f
)
laser1
=
FFT_propagate
(
laser1
,
shape
,
Lambda
,
D
,
1
)
laser2
=
FFT_propagate
(
laser2
,
shape
,
Lambda
,
D
,
1
)
# midpoint computation for even number of points only!
midx
=
(
xpoints
)
//
2
midy
=
(
ypoints
)
//
2
coef1
=
np
.
abs
(
laser1
[
midx
,
midy
])
coef2
=
np
.
abs
(
laser2
[
midx
,
midy
])
ratio
=
(
coef1
/
coef2
)
**
2
pc2
=
1
/
(
1
+
ratio
)
pc1
=
pc2
*
ratio
print
(
"c1 {0}, coef1 {1}, error {3} (raw output {2})"
.
format
(
c1
,
pc1
,
coef1
,
np
.
abs
(
c1
-
pc1
)))
print
(
"c2 {0}, coef2 {1}, error {3} (raw output {2})"
.
format
(
c2
,
pc2
,
coef2
,
np
.
abs
(
c2
-
pc2
)))
# plot hand tuned for certain ranges and sizes, not automtically scaled
fig
=
pl
.
figure
(
110
)
fig
.
clear
()
off1
=
xpoints
/
10
off2
=
xpoints
/
6
pl
.
subplot
(
1
,
3
,
1
)
pl
.
imshow
(
abs
(
field
))
pl
.
xlim
(
midx
-
off1
,
midx
+
off1
)
pl
.
ylim
(
midy
-
off1
,
midy
+
off1
)
pl
.
draw
()
pl
.
subplot
(
1
,
3
,
2
)
pl
.
imshow
(
abs
(
laser1
))
pl
.
xlim
(
midx
-
off2
,
midx
+
off2
)
pl
.
ylim
(
midy
-
off2
,
midy
+
off2
)
pl
.
draw
()
pl
.
subplot
(
1
,
3
,
3
)
pl
.
imshow
(
abs
(
laser2
))
pl
.
xlim
(
midx
-
off2
,
midx
+
off2
)
pl
.
ylim
(
midy
-
off2
,
midy
+
off2
)
pl
.
draw
()
if
in_ipython
():
pl
.
show
(
block
=
0
)
else
:
pl
.
show
(
block
=
1
)
####### Apply phase plate #######################################
laser1
=
field
*
(
np
.
conjugate
(
field1
))
laser2
=
field
*
(
np
.
conjugate
(
field2
))
####### Propagates the field by FFT ##############################
laser1
=
FFT_propagate
(
laser1
,
shape
,
Lambda
,
D
,
1
)
laser2
=
FFT_propagate
(
laser2
,
shape
,
Lambda
,
D
,
1
)
f
=
D
#laser1 = apply_lens(laser1, shape, Lambda, f)
#laser2 = apply_lens(laser2, shape, Lambda, f)
laser1
=
apply_thin_lens
(
laser1
,
shape
,
Lambda
,
f
)
laser2
=
apply_thin_lens
(
laser2
,
shape
,
Lambda
,
f
)
laser1
=
FFT_propagate
(
laser1
,
shape
,
Lambda
,
D
,
1
)
laser2
=
FFT_propagate
(
laser2
,
shape
,
Lambda
,
D
,
1
)
# midpoint computation for even number of points only!
midx
=
(
xpoints
)
//
2
midy
=
(
ypoints
)
//
2
coef1
=
np
.
abs
(
laser1
[
midx
,
midy
])
coef2
=
np
.
abs
(
laser2
[
midx
,
midy
])
ratio
=
(
coef1
/
coef2
)
**
2
pc2
=
1
/
(
1
+
ratio
)
pc1
=
pc2
*
ratio
print
(
"c1 {0}, coef1 {1}, error {3} (raw output {2})"
.
format
(
c1
,
pc1
,
coef1
,
np
.
abs
(
c1
-
pc1
)))
print
(
"c2 {0}, coef2 {1}, error {3} (raw output {2})"
.
format
(
c2
,
pc2
,
coef2
,
np
.
abs
(
c2
-
pc2
)))
# plot hand tuned for certain ranges and sizes, not automtically scaled
fig
=
pl
t
.
figure
(
110
)
fig
.
clear
()
off1
=
xpoints
/
10
off2
=
xpoints
/
6
pl
t
.
subplot
(
1
,
3
,
1
)
pl
t
.
imshow
(
abs
(
field
))
pl
t
.
xlim
(
midx
-
off1
,
midx
+
off1
)
pl
t
.
ylim
(
midy
-
off1
,
midy
+
off1
)
pl
t
.
draw
()
pl
t
.
subplot
(
1
,
3
,
2
)
pl
t
.
imshow
(
abs
(
laser1
))
pl
t
.
xlim
(
midx
-
off2
,
midx
+
off2
)
pl
t
.
ylim
(
midy
-
off2
,
midy
+
off2
)
pl
t
.
draw
()
pl
t
.
subplot
(
1
,
3
,
3
)
pl
t
.
imshow
(
abs
(
laser2
))
pl
t
.
xlim
(
midx
-
off2
,
midx
+
off2
)
pl
t
.
ylim
(
midy
-
off2
,
midy
+
off2
)
pl
t
.
draw
()
if
in_ipython
():
pl
t
.
show
(
block
=
0
)
else
:
pl
t
.
show
(
block
=
1
)
# testing if the script is run from within ipython
...
...
@@ -115,5 +128,5 @@ def in_ipython():
return
True
if
__name__
==
'__main__'
:
main
()
main
()
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment