Skip to content

v3.1.0

Choose a tag to compare

@roytsmart roytsmart released this 09 Oct 00:03
00852f9

Measured efficiencies sampled differently along another axis (#252)

MeasuredMirror, MeasuredFilter and MeasuredRulings interpolate a measured efficiency along the axis of its wavelengths. Before this release they refused a measurement whose wavelengths also varied along another axis, such as a separate set of samples for each of several witness samples. The grating witnesses in esis are such a measurement, and efficiency() raised on them.

  • axis_wavelength, a new keyword-only field of each class, names the axis to interpolate along. The other axes of the wavelengths then broadcast against the rays, so a ray with a channel axis is matched to the measurement of its own channel rather than crossed with all of them, and they are part of shape.
  • Left at None (the default), the wavelengths must vary along a single axis besides axis_angle, as before. Uncertain wavelengths now interpolate on this path too.
  • Measured at one angle. Without axis_angle, the direction may now be repeated along any axis, as it is when measurements at the same angle are stacked with na.stack. It must still be the same everywhere. A measurement at several angles whose axis_angle was forgotten is still refused, with a message asking for it. A stack's wavelengths vary along the stacking axis, so a stack also needs axis_wavelength.
  • With axis_angle, the angles may be repeated along the wavelength axis, as in a table of wavelength against angle, but may not vary along it.
  • shape refuses whatever efficiency() refuses. Before, it reported a shape for measurements whose efficiency always raised, such as angles which decrease or are not angles. It also now includes the axes the angles vary along besides axis_angle, which reach the efficiency through its weights in angle.

Every layer of a coating, written out (#253)

AbstractLayerSequence.layers_ is every Layer of a sequence, first to last. Each nested sequence is written out in place, and each period of a PeriodicLayerSequence in turn, so counting the layers of a material in it counts the layers of that material deposited. MultilayerMirror.layers holds the top-level items only, where a periodic block is one entry. On the ESIS grating coating, which repeats an Al/SiC/Mg period three times beneath a top group, layers_ gives four Mg layers where a count of layers gives one.

The linear forward model on a GPU (#229, by @jacobdparker)

LinearSystem.weights and LinearSystem.image take device, passed through to named_arrays.regridding.weights, so that the conservative regrid can be built and applied on a GPU. device=None, the default, gives exactly what it did before. The weights are no longer pulled back to the host by the units of the vignetting, since regridding 3.5 and named-arrays 2.14, which optika requires, handle dimensionless weights on the device.

Full Changelog: v3.0.0...v3.1.0