detector_calibrate — DRIVE pxrd op

• Data kinds: image2d × signal × table → table

• Call: import fullseye as fs; fs.ledger.detector_calibrate(image, d_spacings, geometry_guess, n_azimuth=180, fit_tilt=True, min_rings=2) (to call the implementation directly, import pxrd; pxrd.detector_calibrate(image, d_spacings, geometry_guess, n_azimuth=180, fit_tilt=True, min_rings=2); from the registry, opsdrive.get("detector_calibrate"))

• GPU: none (CPU reference implementation only)

Usage

Calibrates the detector center, distance and tilt from the rings of a known standard (such as Si).

d_spacings is a list of standard spacings [Å] (not necessarily in order of strength), geometry_guess is at least pixel and

wavelength, if known, cx, cy, distance, tilt, tilt_dir. Steps:

1. If there is no center, start from the center of gravity of the bright pixel, pick up the strongest ring along the ray, and update the center three times by fitting the circle.

2. If there is no distance, assign the first peak of the radial profile to the candidates for d (four from the smallest 2θ) and compare them with the predictions for the other rings. Select the pair with the highest number of matching observations.

3. Predict the position of each ring on the n_azimuth rays in the current geometry, pick a point at the center of gravity of the intensity in the window, Use scipy.optimize.least_squares to guess (two components of cx, cy, distance, tilt) with the 2θ residual [deg]. window 4 times while contracting. The tilt is solved using the two components of the rotation vector tilt·(cos φ, sin φ) (avoiding the singularity where φ becomes indeterminate when the slope is 0).

Return value (dict): Geometry (cx, cy, distance, pixel, wavelength, tilt, tilt_dir)

rms_two_theta_deg・n_points・n_rings・rings_deg・ok(rms is less than 0.25·pixel/distance

and rings >= min_rings).

Raises ValueError: Image not 2-D, no d's, no pixels/wavelengths, min_rings'' rings not found.

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• poc_pxrd_phase_peel — py -3.11 examples/poc_pxrd_phase_peel.py

Ops the type connects to (they accept table as input)

course_layout · course_occupancy · course_contains · world_build · world_camera · world_move · lidar_scan · rss_longitudinal_same

Same category (pxrd)

cif_read · cubic_prototype · powder_reflections · scherrer_size · debye_ring_image · detector_two_theta · azimuthal_integrate · diffraction_peaks


*Provenance: pxrd.py — DRIVE operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.