XicsrtOpticMeshMosaicCrystal¶
New Members¶

class
XicsrtOpticMeshMosaicCrystal
(config=None, strict=None, initialize=None)[source]¶ Bases:
xicsrt.optics._InteractMosaicCrystal.InteractMosaicCrystal
,xicsrt.optics._ShapeMesh.ShapeMesh
A meshgrid mosaic crystal optic.Configuration Options:
 mosaic_spread : float (0.0) [radians]
 The fwhm of the Gaussian distribution of crystalite normals around the nominal surface normal.
 mosaic_depth : int (15)
 The number of crystalite layers to model. This value will depend on the crystal structure and the incident xray energy.
 mosaic_cutoff : float (None)
 A numerical probability cutoff used to avoid calculation of the mosaic reflection for angles far away from the nominal Bragg angle. A value of 1e8 would provide a 6sigma cutoff in angles, while a value of 1e14 would provide an 8sigma cutoff. By default no cutoff is used.
 crystal_spacing : float [angstroms]
The spacing between crystal planes. .. Note:
This is the nominal 'd' crystal spacing, not the '2d' spacing often used in the literature.
 reflectivity : float (1.0)
 A reflectivity factor for this optic. The reflectivity will modify the probability that a ray will reflect from this optic.
 check_bragg : bool (True)
 Switch between xray Bragg reflections and optical reflections for this optic. If True, a rocking curve will be used to determine the probability of reflection for rays based on their incident angle. If false this optic will act as a perfect mirror.
 rocking_type : str (‘gaussian’)
 The type of shape to use for the crystal rocking curve. Allowed types are ‘step’, ‘gaussian’ and ‘file’.
 rocking_fwhm : float [rad]
 The width of the rocking curve, in radians. This option only used when rocking_type is ‘step’ or ‘gaussian’.
 rocking_file : str or list
 A filename from which to read rocking curve data. A list may be used if sigma and pi data are in separate files.
 rocking_filetype : str
The type of rocking curve file to be loaded. The following formats are currently supported: ‘xop’, ‘x0h’, ‘simple’. .. Note:
Actually at this point only 'xop' is supported. np 20201013
 rocking_mix : float
 A mixing factor to combine the sigma and pi reflectivities. This value will be interpreted as sigma/pi and will mix the reflection probabilities linearly. ref = sigma*mix + pi*(1mix)
 xsize
 The size of this element along the xaxis direction. Typically corresponds to the ‘width’ of the optic.
 ysize
 The size of this element along the yaxis direction. Typically corresponds to the ‘height’ of the optic.
 zsize
 The size of this element along the zaxis direction. Typically not required, but if needed will correspond to the ‘depth’ of the optic.
 pixel_size : float (None)
 The pixel size, used for binning rays into images. This is currently a single number signifying square pixels.
 aperture : dict or array (None)
 Define one or more apertures to to apply to this optic. Each aperture is defined as a dictionary with the following keys: shape, size, origin, logic. The origin and logic field keys are optional. The interpretation of size will depend on the provided shape.
 trace_local : bool (False)
 If true: transform rays to optic local coordinates before raytracing, do raytracing in local coordinates, then transform back to global coordinates. The default is ‘false’ as most builtin optics can perform raytracing in global coordinates. This option is convenient for optics with complex geometry for which intersection and reflection equations are easier or more clear to program in fixed local coordinates.
 check_size : bool (true)
 Perform a check for whether the rays intersect the optic within the defined bounds (usually defined by ‘xsize’ and ‘ysize’). If set to False all rays with a defined reflection/transmission condition will be traced if an intersection can be determined.
 check_aperture : bool (true)
 Perform a check for whether the rays intersect the optic within the defined bounds (usually defined by ‘xsize’ an ‘ysize’). If set to False all rays with a defined reflection/transmission condition will be traced if an intersection can be determined.
 filters
 No documentation yet. Please help improve XICSRT!
mesh_points
mesh_faces
mesh_normals
mesh_coarse_points
mesh_coarse_faces
mesh_coarse_normals
mesh_interpolate
mesh_refine
 origin
 The x,y,x origin of this element in global coordinates.
 zaxis
 A unitvector defining the zaxis of the element in global coordinates. For most optics: zaxis defines the surface normal direction.
 xaxis : (optional)
 A unitvector defining the xaxis of the element in global coordinates. For most optics: xaxis defines the ‘width’ direction. If xaxis is not provided it will be automatically generated by: cross(zaxis, [0,1,0]). The yaxis is always automatically generated and defined by: cross(zaxis, xaxis)
 class_name
 Automatically generated.
 yo_mama
 Is a wonderful person!
Inherited Members¶

class
XicsrtOpticMeshMosaicCrystal
[source] 
__init__
(config=None, strict=None, initialize=None) Initialize self. See help(type(self)) for accurate signature.

_mesh_precalc
(points, normals, faces)

aim_to_point
(aim_point, xaxis=None) Set the ZAxis to aim at a particular point.

angle_calc
(rays, norm, mask=None)

angle_check
(rays, norm, mask=None)

check_aperture
(X_local, mask) Check if the ray intersection is within the aperture as set by the ‘aperture’ config option.
Note
This method expects to be given the ray intersections in local coordinates. Generally this method should not be called directly instead use check_bounds.

check_bounds
(X, mask)

check_config
() Check the config before copying to the internal param. This is called during object instantiation (__init__) and therefore before setup is called.

check_param
() Check the internal parameters prior to initialization. This will be called after setup and before initialize.

check_size
(X_local, mask) Check if the ray intersection is within the optic bounds as set by the xsize, ysize and zsize config options.
Note
This method expects to be given the ray intersections in local coordinates. Generally this method should not be called directly, instead use check_bounds.

default_config
()  mosaic_spread : float (0.0) [radians]
 The fwhm of the Gaussian distribution of crystalite normals around the nominal surface normal.
 mosaic_depth : int (15)
 The number of crystalite layers to model. This value will depend on the crystal structure and the incident xray energy.
 mosaic_cutoff: float (None)
 A numerical probability cutoff used to avoid calculation of the mosaic reflection for angles far away from the nominal Bragg angle. A value of 1e8 would provide a 6sigma cutoff in angles, while a value of 1e14 would provide an 8sigma cutoff. By default no cutoff is used.

find_near_faces
(X, mesh, mask)

find_point_faces
(p_idx, faces, mask=None) Find all of the the faces that include a given mesh point.

get_config
()

get_default_xaxis
(zaxis) Get the Xaxis using a default definition.
In order to fully define the orientation of a component both, a zaxis and an xaxis are expected. For certain types of components the xaxis definition is unimportant and can be defined using a default definition.

initialize
() Initialize the object.

interact
(rays, xloc, norm, mask=None) Model reflections from a mosaic crystal using a multilayer model. This is meant to simulate the penetration of xrays into the HOPG until the rays either encounter a crystalite that satisfies the Bragg condition or get absorbed. This method of calculation replicates both the HOPG ‘focusing’ qualities as well as the expected throughput.

intersect
(rays) Calculate ray intersections with the mesh.

intersect_location
(rays) Calculate the surface location at the ray intersections.
This baseclass just returns a copy of the ray origin.

intersect_normal
(xloc, mask) Calculate the surface normal at the ray intersection locations.
Normals are not defined for this baseclass; an array of np.nan will always be returned.

location_from_distance
(rays, dist, mask=None) Calculate 3D locations given a distance along the rays.

make_image
(rays) Collect the rays that intersect with this optic into a pixel array that can be used to generate an intersection image.
Programming Notes
It is important that this calculation is compatible with intersect_check in terms of floating point errors. The simple way to achieve this is to ensure that both use the same calculation method.

mesh_get_index
(hits, faces) Match faces to face indexes, with a loop over faces.

mesh_initialize
() Precalculate a number of mesh properties that are needed in the other mesh methods.

mesh_interpolate
(X, mesh, mask)

mesh_intersect_1
(rays, mesh) Find the intersection of rays with the mesh using the Möller–Trumbore algorithm.

mesh_intersect_2
(rays, mesh, mask, faces_idx, faces_mask) Check for ray intersection with a list of mesh faces.
Programming Notes
Because of the mesh indexing, the arrays here have different dimensions than in mesh_intersect_1, and need a different vectorization.
At the moment I am using an less efficient mesh intersection method. This should be updated to use the same method as mesh_intersect_1, but with the proper vectorization.

mesh_normals
(hits, mesh, mask)

mosaic_normals
(normals, mask, copy=True) Add mosaic spread to the normals. Generates a list of crystallite normal vectors in a Gaussian distribution around the nominal surface normals.

point_to_external
(point_local)

point_to_local
(point_external)

ray_to_external
(ray_local, copy=False)

ray_to_local
(ray_external, copy=False)

reflect_vectors
(rays, xloc, normals, mask=None)

rocking_curve_filter
(incident_angle, bragg_angle)

set_orientation
(zaxis, xaxis=None)

setup
() Perform any setup actions that are needed prior to initialization.

to_ndarray
(vector_in)

to_vector_array
(vector_in) Convert a vector to a numpy vector array (if needed).

trace
(rays) The main method that performs raytracing for this optic.
Raytracing here may be done in global or local coordinates depending on the how the optic is designed and the value of the configuration option: ‘trace_local’.

trace_global
(rays) This is method that is called by the dispacher to perform raytracing for this optic. Rays into and out of this method are always in global coordinates.
It may be convenient for some optics object to do raytracing in local coordinates rather than in global coordinates. This method facilitates this by implementing the ‘trace_local’ configuration option.

update_config
(config_new, **kwargs) Overwrite any config values in this object with the ones given. This will be done recursively for all nested dictionaries.

vector_to_external
(vector)

vector_to_local
(vector)
