Release Notes
1.16
2026-03-26
New
position_modules_interpolate()method to assemble data with more spatial accuracy, splitting pixel values to fit on a regular grid, using PyFAI (PR #395). This is available for most detectors, but not DSSC. Theplot_data()method also gains aninterpolate=parameter to assemble data this way for plotting.JUNGFRAUGeometrynow accepts input data for a single module as a 2D array, as well as 3D (PR #373).
1.15
2025-04-08
Added support for
data_coords_to_positions()onJUNGFRAUGeometry(PR #346).Fix for creating a PyFAI detector object for JUNGFRAU with
to_pyfai_detector()(PR #334).More informative error messages when input or output arrays for assembling images don’t match the expected shape (PR #343).
The dependency on
cfelpyutilshas been replaced bycfel_fmt, a fork to maintain the pieces we need (PR #344).
1.14
2025-03-07
1.13
2025-01-28
JUNGFRAU 4M (8 modules) geometry can now be updated based on the positions of the 2 motors moving the hemispheres (PR #303), using
JF4MMotors.EXtra-geom now requires Python 3.9 or above (PR #309).
1.12
2024-05-27
AGIPD-1M detector geometry can now be updated using the positions from the 8 quadrant motors (PR #269). A reference geometry is required as a starting point, and a new geometry can be created based on the changes in the motor positions. See Motor-based geometry for an example of how to use this.
1.11
2023-11-01
Add an
example()class method for each detector type to create a sample geometry, and helper class methodsmonolithic_geometry()andpair_geometry()for Epix detectors (PR #243). Theexample()methods make it easier to look at the data when you have no specific information about its geometry, but it may be quite different from the real positions of modules in a given experiment. For some detector types, you need to pass the number of modules in your detector.Modules in
AGIPD_500K2GGeometryare now labelled M0 - M7 byinspect()(PR #226).
1.10
2023-04-21
Support for LPD Mini detectors (PR #187).
Add
to_pyfai_detector()for JUNGFRAU detectors (PR #197)Fix
AGIPD_500K2GGeometry.from_origin()with non-default units (PR #213).Fix
plot_data()with labelled data arrays (PR #198).Fix DSSC’s
position_modules_cartesian()andplot_data_cartesian()to accept Xarray labelled array objects (PR #207).Fix alias for LPD PyFAI detector class (PR #190).
1.9
2022-10-28
New methods to assemble DSSC data and convert the hexagonal pixels onto a square grid:
position_modules_cartesian()andplot_data_cartesian()(PR #174).
1.8
2022-10-18
New method
DSSC_1MGeometry.plot_data_hexes()to plot DSSC data, drawing a hexagon for each pixel. This is slower than regular plotting, but more accurately represents what the detector ‘saw’ (PR #167).More useful labels, and an option to supply custom module labels, for JUNGFRAU geometry in
inspect()(PR #177).Fix assembling JUNGFRAU images from labelled array with module numbers starting from 1 (PR #169).
Fix a bug writing some geometry objects to CrystFEL format
.geomfiles (PR #163)
1.7.1
2022-05-19
Fix the pattern of hexagonal pixels in the DSSC detector (PR #160). Thanks to Loïc le Guyader for identifying and investigating this issue.
1.7
2022-03-02
New method
to_pyfai_detector()for AGIPD, DSSC and LPD to make a PyFAI detector object (PR #139). See Azimuthal integration for an example.New method
rotate()to rotate all or selected parts of the detector by given angles in 3D (PR #128).Rename
plot_data_fasttoplot_data, andposition_modules_fasttoposition_modules(PR #143). The old names remain as aliases.EXtra-geom now works with (and requires) cfelpyutils 2.x for reading CrystFEL format
.geomfiles (PR #114).
1.6
2021-09-22
Store and read (with new
from_h5_file()method) quadrant positions in EuXFEL HDF5 format geometry files (PR #92).Read some metadata from CrystFEL format
.geomfiles and use it as defaults when writing a new.geomfile (PR #87).Fix writing
coffset(z coordinates) correctly in.geomfiles (PR #102).Require cfelpyutils < 2 until we fix compatibility with the new version (PR #107).
1.5
2021-08-30
Add method to make geometry from ASIC pairs positions for ePix100 detector and method to normalize ePix data (PR #97). See ePix100/ePix10K.
Make scipy an optional dependency (PR #90).
Add method to make DSSC-1M geometry from only quadrant positions (PR #89). See DSSC geometry (example) and DSSC-1M (reference).
Fix method name in docstring (PR #84).
1.4
2021-06-16
Added support for ePix100 & ePix10k detectors (PR #73). See ePix100/ePix10K geometry (example) and ePix100/ePix10K (reference).
GenericGeometry.inspect()now labels modules and tiles if there are more than one (PR #74).Allocating output arrays to assemble integer data should be faster (PR #78).
Use
NotImplementedErrorto make it clear that creatingGenericGeometryfrom a.geomfile is not yet supported (PR #77).
1.3
2021-05-20
A new
GenericGeometryclass allows describing the layout of an unknown detector, with the user specifying details such as pixel size and number of modules (PR #72). See Generic Geometry for an introduction.Fix a small discrepancy in module positions with
JUNGFRAUGeometry.from_module_positions()(PR #69).
1.2.1
2021-04-20
Fix assembling images from an
extra_dataStackView object (PR #67).
1.2
2021-04-16
JUNGFRAU geometry can now be saved to and loaded from CrystFEL format
.geomfiles - see the JUNGFRAU example,JUNGFRAUGeometry.write_crystfel_geom()andJUNGFRAUGeometry.from_crystfel_geom()(PR #49).Images can now be assembled from an
xarray.DataArraywith a dimension named ‘module’ labelled with module numbers counting from 0 (PR #62).Fix how
coffsetinformation is handled when reading CrystFEL geometry files (PR #60).PNCCDGeometry, added in 0.10, is now documented and tested (PR #45).New Frequently Asked Questions document (PR #51)
Avoid importing
scipy.ndimageunnecessarily (PR #50).
1.1.1
2020-12-17
Fix module orientation for AGIPD 500k detector (PR #41).
1.1
2020-12-04
New
position_modules_symmetric()method to assemble data with the detector centre at the midpoint of the output array (PR #31).New
offset()method to move part or all of a geometry in 2 or 3 dimensions (PR #27).New function
agipd_asic_seams()to select or mask the double-width pixels where AGIPD tiles touch.Examples in documentation rearranged and improve (PR #32, PR #36).
CI moved to Github Actions (PR #34) and integrated with Dependabot to control new versions of dependencies (PR #35).
1.0
2020-10-01
Added support for AGIPD ‘mini-half’ detector (8 modules) - see AGIPD-500K2G (PR #26).
Added methods to write XFEL HDF5 geometry files and get quadrant positions from geometry objects (PR #24).
Fixed y-axis scale in metres for plotting DSSC data (PR #23).
Faster image assembly with less overhead (PR #16).
Allow parallel image assembly using a thread pool (PR #17), which can speed up assembling several images to a single 3D array.
0.10
2020-06-24
Added support for pnCCD detector (PR #13).
0.9
2020-03-24
New example showing how to construct masks: Making data masks (PR #1).
Correct code in
LPD_1MGeometry.from_h5_file_and_quad_positions()which was working only by numeric coincidence (PR #7).
0.8
2019-11-18
First separated version. No functional changes from karabo_data 0.7.
Earlier history
The code in EXtra-geom was previously released as karabo_data, up to version 0.7. See the karabo_data release notes for changes before the separation.