Skip to content

nabu.app.create_distortion_map_from_poly

source module nabu.app.create_distortion_map_from_poly

Functions

  • create_distortion_maps_entry_point This application builds two arrays. Let us call them map_x and map_z. Both are 2D arrays with shape given by (nz, nx). These maps are meant to be used to generate a corrected detector image, using them to obtain the pixel (i,j) of the corrected image by interpolating the raw data at position ( map_z(i,j), map_x(i,j) ).

  • create_maps_x_and_z This method is meant for those applications which wants to use the functionalities of the poly2map entry point through a standar python API. The argument arg_dict must contain the keys that you can find in cli_configs.py: CreateDistortionMapHorizontallyMatchedFromPolyConfig Look at this files for variables and their meaning and defaults Parameters:: args_dict : dict a dictionary containing keys : center_x, center_z, nz, nx, c2, c4, axis_pos return: max_x, map_z, new_rot_pos

source create_distortion_maps_entry_point(user_args=None)

This application builds two arrays. Let us call them map_x and map_z. Both are 2D arrays with shape given by (nz, nx). These maps are meant to be used to generate a corrected detector image, using them to obtain the pixel (i,j) of the corrected image by interpolating the raw data at position ( map_z(i,j), map_x(i,j) ).

This map is determined by a user given polynomial P(rs) in the radial variable rs = sqrt( (z-center_z)2 + (x-center_x)2 ) / (nx/2) where center_z and center_x give the center around which the deformation is centered.

The perfect position (zp,xp) , that would be observed on a perfect detector, of a photon observed at pixel (z,x) of the distorted detector is

(zp, xp) = (center_z, center_x) + P(rs) * ( z - center_z , x - center_x )

The polynomial is given by P(rs) = rs (1 + c2 * rs2 + c4 * rs*4)

The map is rescaled and reshifted so that a perfect match is realised at the borders of a horizontal line passing by the center. This ensures coerence with the procedure of pixel size calibration which is performed moving a needle horizontally and reading the motor positions at the extreme positions.

The maps are written in the target file, creating it as hdf5 file, in the datasets

"/coords_source_x"
"/coords_source_z"

The URLs of these two maps can be used for the detector correction of type "map_xz" in the nabu configuration file as in this example

 [dataset]
 ...
 detector_distortion_correction = map_xz
 detector_distortion_correction_options = map_x="silx:./map_coordinates.h5?path=/coords_source_x" ;  map_z="silx:./map_coordinates.h5?path=/coords_source_z"

source create_maps_x_and_z(args_dict)

This method is meant for those applications which wants to use the functionalities of the poly2map entry point through a standar python API. The argument arg_dict must contain the keys that you can find in cli_configs.py: CreateDistortionMapHorizontallyMatchedFromPolyConfig Look at this files for variables and their meaning and defaults Parameters:: args_dict : dict a dictionary containing keys : center_x, center_z, nz, nx, c2, c4, axis_pos return: max_x, map_z, new_rot_pos

Raises

  • ValueError