Beam
[1]:
import nexus as nx
import numpy as np
# set beam along pi polarization via initialization parameters
beam = nx.Beam(polarization = 1,
mixing_angle = 0,
canting_angle = 90,
id="my beam",
profile = "g", # Gaussian beam profile
fwhm = nx.Var(0.21, min=0, max=1, fit =True, id="beam fwhm")
)
print(beam)
print(beam.matrix)
print("")
print(beam.jones_vector)
print("")
print(beam.ComplexCoherence())
Beam
.id: my beam
.polarization (mm): Var.value = 1.0, .min = 0.0, .max = 1.0, .fit: False, .id:
.mixing_angle (mm): Var.value = 0.0, .min = -45.0, .max = 45.0, .fit: False, .id:
.canting_angle (mm): Var.value = 90.0, .min = -90.0, .max = 90.0, .fit: False, .id:
.matrix:
[[3.74939946e-33+0.j 6.12323400e-17+0.j]
[6.12323400e-17+0.j 1.00000000e+00+0.j]]
.jones_vector:
[[6.123234e-17+0.j]
[1.000000e+00+0.j]]
.profile: g
.fwhm (mm): Var.value = 0.21, .min = 0.0, .max = 1.0, .fit: True, .id: beam fwhm
.Polarization(): 1.0
.Coherence(): 1.0
.PhaseDifference() [sigma - pi](rad): 0.0
[[3.74939946e-33+0.j 6.12323400e-17+0.j]
[6.12323400e-17+0.j 1.00000000e+00+0.j]]
[[6.123234e-17+0.j]
[1.000000e+00+0.j]]
(1+0j)
[2]:
beam = nx.Beam(id="new beam")
beam.CircularLeft()
print(beam)
print(beam.ComplexCoherence())
Beam
.id: new beam
.polarization (mm): Var.value = 1.0, .min = 0.0, .max = 1.0, .fit: False, .id:
.mixing_angle (mm): Var.value = 45.0, .min = -45.0, .max = 45.0, .fit: False, .id:
.canting_angle (mm): Var.value = 0.0, .min = -90.0, .max = 90.0, .fit: False, .id:
.matrix:
[[0.5+0.j 0. -0.5j]
[0. +0.5j 0.5+0.j ]]
.jones_vector:
[[0.70710678+0.j ]
[0. +0.70710678j]]
.profile: g
.fwhm (mm): Var.value = 0.0, .min = 0.0, .max = inf, .fit: False, .id: FWHM
.Polarization(): 1.0
.Coherence(): 1.0
.PhaseDifference() [sigma - pi](rad): -1.5707963267948966
-1j
[3]:
# set coherency matrix for unpolarized beam
# not working in verison 2
beam.SetCoherencyMatrix(np.array([[1,0], [0, 1]], dtype=complex))
print(beam)
print(beam.ComplexCoherence())
-------------------------------------------------------------------------------------------
NEXUS ERROR in Beam
warning: removed in verison 2.0.0
-------------------------------------------------------------------------------------------
Beam
.id: new beam
.polarization (mm): Var.value = 1.0, .min = 0.0, .max = 1.0, .fit: False, .id:
.mixing_angle (mm): Var.value = 45.0, .min = -45.0, .max = 45.0, .fit: False, .id:
.canting_angle (mm): Var.value = 0.0, .min = -90.0, .max = 90.0, .fit: False, .id:
.matrix:
[[0.5+0.j 0. -0.5j]
[0. +0.5j 0.5+0.j ]]
.jones_vector:
[[0.70710678+0.j ]
[0. +0.70710678j]]
.profile: g
.fwhm (mm): Var.value = 0.0, .min = 0.0, .max = inf, .fit: False, .id: FWHM
.Polarization(): 1.0
.Coherence(): 1.0
.PhaseDifference() [sigma - pi](rad): -1.5707963267948966
-1j
[4]:
# set Jones vector for a fully sigma polarized beam
beam.SetJonesVector(np.array([1,0], dtype=complex))
print(beam)
print(beam.ComplexCoherence())
Beam
.id: new beam
.polarization (mm): Var.value = 1.0, .min = 0.0, .max = 1.0, .fit: False, .id:
.mixing_angle (mm): Var.value = 45.0, .min = -45.0, .max = 45.0, .fit: False, .id:
.canting_angle (mm): Var.value = 0.0, .min = -90.0, .max = 90.0, .fit: False, .id:
.matrix:
[[0.5+0.j 0. -0.5j]
[0. +0.5j 0.5+0.j ]]
.jones_vector:
[[0.70710678+0.j ]
[0. +0.70710678j]]
.profile: g
.fwhm (mm): Var.value = 0.0, .min = 0.0, .max = inf, .fit: False, .id: FWHM
.Polarization(): 1.0
.Coherence(): 1.0
.PhaseDifference() [sigma - pi](rad): -1.5707963267948966
-1j
[5]:
beam.LinearSigma()
# not working in verison 2
beam.Rotate(45)
print(beam)
print(beam.ComplexCoherence())
-------------------------------------------------------------------------------------------
NEXUS ERROR in Beam
warning: removed in verison 2.0.0
-------------------------------------------------------------------------------------------
Beam
.id: new beam
.polarization (mm): Var.value = 1.0, .min = 0.0, .max = 1.0, .fit: False, .id:
.mixing_angle (mm): Var.value = 0.0, .min = -45.0, .max = 45.0, .fit: False, .id:
.canting_angle (mm): Var.value = 0.0, .min = -90.0, .max = 90.0, .fit: False, .id:
.matrix:
[[1.+0.j 0.+0.j]
[0.+0.j 0.+0.j]]
.jones_vector:
[[1.+0.j]
[0.+0.j]]
.profile: g
.fwhm (mm): Var.value = 0.0, .min = 0.0, .max = inf, .fit: False, .id: FWHM
.Polarization(): 1.0
.Coherence(): nan
.PhaseDifference() [sigma - pi](rad): nan
(nan+nanj)
[6]:
beam.CircularLeft()
print(beam)
print(beam.Polarization())
print(beam.Coherence())
print(beam.PhaseDifference())
print(beam.ComplexCoherence())
Beam
.id: new beam
.polarization (mm): Var.value = 1.0, .min = 0.0, .max = 1.0, .fit: False, .id:
.mixing_angle (mm): Var.value = 45.0, .min = -45.0, .max = 45.0, .fit: False, .id:
.canting_angle (mm): Var.value = 0.0, .min = -90.0, .max = 90.0, .fit: False, .id:
.matrix:
[[0.5+0.j 0. -0.5j]
[0. +0.5j 0.5+0.j ]]
.jones_vector:
[[0.70710678+0.j ]
[0. +0.70710678j]]
.profile: g
.fwhm (mm): Var.value = 0.0, .min = 0.0, .max = inf, .fit: False, .id: FWHM
.Polarization(): 1.0
.Coherence(): 1.0
.PhaseDifference() [sigma - pi](rad): -1.5707963267948966
1.0
1.0
-1.5707963267948966
-1j
[7]:
print("\nset new Jones vector")
# set Jones vector for a fully polarized beam at 45 deg from the sigma direction
# angle will rotate the refernece plane away from sigma direction
beam.SetJonesVector(np.array([1.0+0j, 0.0]),
angle = 45)
print(beam.jones_vector)
print(beam.ValidJonesVector())
print(beam.MatrixFromJonesVector()) # only in version 2.0.0
set new Jones vector
[[0.70710678+0.j]
[0.70710678+0.j]]
True
[[0.5+0.j 0.5+0.j]
[0.5+0.j 0.5+0.j]]
[ ]: