open_viewmin.nematic.jones#
Jones matrix calculations for transmission of polarized light through the nematic liquid crystal.
Adapted from code originally written by Sophie Ettinger and adapted for open-Qmin data by Yvonne Zagzag.
Functions#
|
Add arrows for polarizer and analyzer directions and, if applicable, |
|
Add arrow indicating orientation of quarter-wave plate |
|
|
|
Add planes to back of box, colored by RGB Jones matrix transmission |
|
Add planes to back of box, colored by RGB Jones matrix transmission |
|
Use plotter's existing nematic director data for Jones matrix |
|
Apply quarter-wave plate transformation to Jones matrix |
|
Calculate Jones matrix product for light propagation through nematic |
|
Calculate list of Jones matrices for a sequence of wavelengths. |
|
Calculate Jones matrix array for one slice at constant z. |
|
Convert a flattened data array to shape (Lx, Ly, Lz, ...). |
|
Import Q-tensor data in the open-Qmin data_format |
|
Permute coordinate axes so that the optical axis corresponds to |
|
Calculate projection matrix along a polarizer's direction in the xy |
|
Create video of simulated polarized optical microscopy images |
|
Given Jones matrices for red, green, and blue light propagation, |
|
Simulated polarized optical microscopy image using a single wavelength |
|
Create image sequence of simulated polarized optical microscopy images |
|
Transform 2D NumPy float rgb array to PyVista texture |
|
Calculate 2x2 rotation matrix |
|
Calculate M' = R M R^T for given matrix M and rotation matrix R. |
|
Saves numerical Jones matrix data to files |
|
Launch dialog to save numerical Jones matrix data to files |
|
Save Jones matrix images to files |
|
Launch dialog to save Jones matrix images to files |
Module Contents#
- _add_jones_arrows(plotter, coord_index, center, actor_name)#
Add arrows for polarizer and analyzer directions and, if applicable, quarter-wave plate direction
- Parameters:
plotter (
NematicPlotNoQt
)coord_index (int)
center (Iterable of [float])
actor_name (str)
- _add_jones_lambda_arrow(plotter, p_dir, a_dir, jones_arrows_scale, arrows_center, lambda_arrow_actor_name)#
Add arrow indicating orientation of quarter-wave plate
- Parameters:
plotter (
NematicPlotNoQt
)p_dir (Iterable of [float])
a_dir (Iterable of [float])
jones_arrows_scale (float)
arrows_center (Iterable of [float])
lambda_arrow_actor_name (str)
- _double_headed_arrow(center, direction, **kwargs)#
- Parameters:
center (Iterable of [float])
direction (Iterable of [float])
kwargs (dict, optional) – Keyword arguments to pyvista.Arrow
- Return type:
(pyvista.Arrow, pyvista.Arrow)
- add_jones_to_plotter(plotter, n=None, site_types=None)#
Add planes to back of box, colored by RGB Jones matrix transmission and normal to x, y, z.
- Parameters:
plotter (
NematicPlot
orNematicPlotNoQt
)n (numpy.ndarray or None, optional) – director data; if None, director will be taken from plotter
site_types (numpy.ndarray, “off”, or None) – site types data; if “off”, all sites are taken to be bulk; if None, site types data will be taken from plotter
- add_jones_toolbar_to_plotter(plotter, n=None, site_types=None)#
Add planes to back of box, colored by RGB Jones matrix transmission and normal to x, y, z, with polarizer/analyzer angles and brightness controlled by sliders.
- Parameters:
plotter (open_viewmin.NematicPlot)
n (numpy.ndarray or None, optional) – director data; if None, director will be taken from plotter
site_types (numpy.ndarray, “off”, or None) – site types data; if “off”, all sites are taken to be bulk; if None, site types data will be taken from plotter
- Returns:
callback that refreshes Jones planes by re-applying the control slider widgets
- Return type:
callable()
- get_director_data_from_plotter(plotter, n, site_types)#
Use plotter’s existing nematic director data for Jones matrix calculations
- Parameters:
plotter (open_viewmin.NematicPlot or open_viewmin.NematicPlotNoQt)
n (numpy.ndarray or None) – nematic director field in flattened array; if None, data is taken from plotter
site_types (numpy.ndarray, “off”, or None) – site types in flattened array; if “off”, all sites are treated as bulk; if None, data is taken from plotter
- Returns:
reshaped arrays of nematic director and site types data
- Return type:
numpy.ndarray, numpy.ndarray
- get_quarter_wave_plate_jones(angle)#
Apply quarter-wave plate transformation to Jones matrix
- Parameters:
angle (float)
- Return type:
numpy.ndarray
- jones_light_propagation_through_sample(director, site_types, wavelength=6.6e-07, res=4.5e-08, n_ord=1.55, n_ext=1.7, optical_axis='z', n_bdy=1.333)#
Calculate Jones matrix product for light propagation through nematic sample.
- Parameters:
director (numpy.ndarray) – nematic director field
site_types (numpy.ndarray) – array of site types (bulk, boundary, or surface) for the lattice
wavelength (float) – wavelength of incident light, in meters
res (float) – lattice resolution, in meters
n_ord (float) – ordinary index of refraction
n_ext (float) – extraordinary index of refraction
optical_axis ('x', 'y', or 'z', optional) – light propagation direction
n_bdy (float or sequence of floats) – isotropic index of refraction inside boundary
- Returns:
Jones matrix for light propagation through the entire simulation box
- Return type:
numpy.ndarray
- jones_matrices_multiple_wavelengths(n, site_types, wavelengths=(6.38e-07, 5.32e-07, 4.65e-07), **kwargs)#
Calculate list of Jones matrices for a sequence of wavelengths.
- Parameters:
n (numpy.ndarray) – nematic director field
site_types (numpy.ndarray) – array of site types (bulk, boundary, surface)
wavelengths (sequence of floats) – wavelengths in meters
**kwargs – keyword arguments accepted by jones_light_propagation_through_sample
- Returns:
list of Jones matrix arrays
- Return type:
list(numpy.ndarray)
- jones_matrix(n_phi, phi_ext, phi_ord)#
Calculate Jones matrix array for one slice at constant z.
- Parameters:
n_phi (numpy.ndarray) – azimuthal angle of director in plane transverse to light propagation
phi_ext (numpy.ndarray) – array of local-frame complex Jones matrices for effective extraordinary index of refraction
phi_ord (numpy.ndarray) – local-frame complex Jones matrix for ordinary index of refraction
- Returns:
array of lab-frame complex Jones matrices
- Return type:
numpy.ndarray
- list_to_xyz_mat(data, dims)#
Convert a flattened data array to shape (Lx, Ly, Lz, …).
- Parameters:
data (numpy.ndarray)
dims ((int, int, int))
- Return type:
numpy.ndarray
- n_and_site_types_from_open_qmin(filename)#
Import Q-tensor data in the open-Qmin data_format
- Parameters:
filename (str) – Filename of open-Qmin-style data.
- Returns:
director, site_types arrays
- Return type:
numpy.ndarray, numpy.ndarray
- permute_axes(arr, axis_name)#
Permute coordinate axes so that the optical axis corresponds to axis_name
- Parameters:
arr (numpy.ndarray)
axis_name ('x', 'y', or 'z')
- Return type:
numpy.ndarray
- polarizer_matrix_from_angle(angle)#
Calculate projection matrix along a polarizer’s direction in the xy plane.
- Parameters:
angle (float) – angle of polarizer with respect to x-axis (after permuting axes so that z is the light propagation direction)
- Returns:
polarizer projection matrix
- Return type:
numpy.ndarray
- pom_animation_rotate_polarizers(plotter, n=None, site_types='off', interval=50, filename=None, **kwargs)#
Create video of simulated polarized optical microscopy images with polarizer and analyzer rotating linearly in time through total angle pi/2.
- Parameters:
plotter (open_viewmin.NematicPlot or open_viewmin.NematicPlotNoQt)
n (numpy.ndarray or None, optional) – nematic director data; if None, this data is taken from the plotter
site_types (numpy.ndarray, “off”, or None, optional) – site types data; if “off”, all sites are treated as bulk; if None, data is taken from plotter
interval (int, optional) – number of milliseconds between frames of animation
filename (str or None, optional) – filename for exported video; if None, no export occurs and the function returns the full HTML string for the video
kwargs (dict, optional) – keyword arguments accepted by pom_image_sequence_rotate_polarizers
- Returns:
filename of exported video or full HTML string defining the video
- Return type:
str
- pom_image_color(jones_mats, polarizer_angle=0.0, analyzer_angle=None, brightness_factor=1, use_quarter_wave_plate=False)#
Given Jones matrices for red, green, and blue light propagation, generate rgb array (float values in [0, 1]) for a simulated color polarized optical microscopy image.
- Parameters:
jones_mats (Iterable of [numpy.ndarray]) – list of three Jones matrix products for propagation of red, green, and blue light (respectively) through the entire sample
polarizer_angle (float) – angle of polarizer
analyzer_angle (float) – angle of analyzer
brightness_factor (float) – multiplier for intensity
use_quarter_wave_plate (bool, optional) – whether to insert a quarter wave plate, oriented at a 45-degree counterclockwise rotation from the polarizer, between the polarizer and the sample
- Returns:
2D array of rgb values for transmitted light
- Return type:
numpy.ndarray
- pom_image_one_wavelength(jones_mat_product, p_angle, a_angle, use_quarter_wave_plate=False)#
Simulated polarized optical microscopy image using a single wavelength of light.
- Parameters:
jones_mat_product (numpy.ndarray) – array of Jones matrix products for light propagation through the entire sample
p_angle (float) – angle of polarizer with respect to x-axis (after permuting axes so that light propagates along z)
a_angle (float) – angle of analyzer with respect to x-axis (after permuting axes so that light propagates along z)
use_quarter_wave_plate (bool, optional) – whether to insert a quarter wave plate, oriented at a 45-degree counterclockwise rotation from the polarizer, between the polarizer and the sample
- Returns:
2D array of transmitted intensities
- Return type:
numpy.ndarray
- pom_image_sequence_rotate_polarizers(ax, n, site_types, num_frames=10, brightness_factor=1, **kwargs)#
Create image sequence of simulated polarized optical microscopy images with polarizer and analyzer rotating linearly in time through total angle pi/2.
- Parameters:
ax (matplotlib.axes) – figure axes
n (numpy.ndarray or None) – nematic director field in flattened array; if None, data is taken from plotter
site_types (numpy.ndarray, “off”, or None) – site types in flattened array; if “off”, all sites are treated as bulk; if None, data is taken from plotter
num_frames (int, optional) – number of subdivisions of the [0, pi/2] interval for the polarizer angle, and thus the number of frames in the animation
brightness_factor (float, optional) – multiplier for intensity
kwargs (dict, optional) – keyword arguments accepted by jones_matrices_multiple_wavelengths
- Returns:
list of transmitted intensity images
- Return type:
list(matplotlib.axes.Axes.imshow)
- rgb_to_texture(rgb_data, sigma=1.0)#
Transform 2D NumPy float rgb array to PyVista texture
- Parameters:
rgb_data (numpy.ndarray) – 2D array of (red, green, blue) intensities, each in the interval [0, 1]
sigma (float, optional) – smoothing factor for Gaussian filter; set to 1. for no filter.
- Return type:
pyvista.Texture
- rotation_matrix_2d(angle)#
Calculate 2x2 rotation matrix
- Parameters:
angle (float or numpy.ndarray) – rotation angle or array thereof
- Returns:
rotation matrix or array thereof
- Return type:
numpy.ndarray
- rotation_transform(mat, rot_mat)#
Calculate M’ = R M R^T for given matrix M and rotation matrix R.
- Parameters:
mat (numpy.ndarray) – Array of matrices M.
rot_mat (numpy.ndarray) – Rotation matrix R.
- Returns:
Array of rotated matrices
- Return type:
numpy.ndarray
- save_jones_data(plotter, filename: str)#
Saves numerical Jones matrix data to files
- Parameters:
plotter (
NematicPlotNoQt
)filename (str)
- save_jones_data_gui(plotter, filename=None)#
Launch dialog to save numerical Jones matrix data to files
- Parameters:
plotter (
NematicPlot
)filename (str | None)
- save_jones_images(plotter, filename: str)#
Save Jones matrix images to files
- Parameters:
plotter (
NematicPlotNoQt
)filename (str)
- save_jones_images_gui(plotter, filename=None)#
Launch dialog to save Jones matrix images to files
- Parameters:
plotter (
NematicPlot
)filename (str | None)