SingleZonePlateRequest.java

package org.fresnel.backend.api;

import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import org.fresnel.optics.MaskType;
import org.fresnel.optics.Polarity;
import org.fresnel.optics.SingleZonePlateParameters;

/**
 * REST request body for a single Fresnel zone plate design.
 */
public record SingleZonePlateRequest(
        @NotNull @Positive Double apertureDiameterMm,
        @NotNull @Positive Double focalLengthMm,
        @NotNull @Positive Double wavelengthNm,
        @NotNull @Positive Double dpi,
        Double targetOffsetXmm,
        Double targetOffsetYmm,
        MaskType maskType,
        Polarity polarity
) {

    public SingleZonePlateParameters toParameters() {
        return new SingleZonePlateParameters(
                apertureDiameterMm,
                focalLengthMm,
                wavelengthNm,
                dpi,
                targetOffsetXmm == null ? 0.0 : targetOffsetXmm,
                targetOffsetYmm == null ? 0.0 : targetOffsetYmm,
                maskType == null ? MaskType.BINARY_AMPLITUDE : maskType,
                polarity == null ? Polarity.POSITIVE : polarity);
    }
}