def convert_samples_to_required_cs()

in src/open_vp_cal/core/calibrate.py [0:0]


def convert_samples_to_required_cs(
        camera_conversion_cat: Union[str, constants.CAT],
        input_plate_cs: RGB_Colourspace,
        measured_samples: Dict, reference_samples: Dict, native_camera_gamut_cs: RGB_Colourspace,
        decoupled_lens_white_samples: np.array, peak_lum: float) -> Tuple:
    """ Convert the measured and reference samples to the required colour spaces.
        We also inject synthetic values for the 18% grey which helps us with the calibration

    Args:
        camera_conversion_cat: The colour conversion cat we want to use
        input_plate_cs: The colour space of the input plate we measured the samples from
        measured_samples: The measured samples from the input plate
        native_camera_gamut_cs: The native colour space of the camera, used to capture the input plate
        decoupled_lens_white_samples: An additional sample of the decoupled white
        reference_samples: The reference samples for the calibration process displayed on the led wall
        peak_lum: The peak luminance of the led wall

    Returns: Tuple containing the converted samples

    """
    eotf_signal_values = list(measured_samples[Measurements.EOTF_RAMP_SIGNAL])
    closest_18_percent_index = find_closest_below(eotf_signal_values, peak_lum * 0.18)
    eotf_signal_values.insert(closest_18_percent_index, peak_lum * 0.18)

    grey_measurements_native_camera_gamut = colour.RGB_to_RGB(
        measured_samples[Measurements.GREY], input_plate_cs, native_camera_gamut_cs, camera_conversion_cat
    )

    max_white_camera_native_gamut = colour.RGB_to_RGB(
        measured_samples[Measurements.MAX_WHITE], input_plate_cs, native_camera_gamut_cs, camera_conversion_cat
    )
    # Get The Macbeth Samples And Convert To Camera Native
    macbeth_measurements_camera_native_gamut = colour.RGB_to_RGB(
        measured_samples[Measurements.MACBETH], input_plate_cs, native_camera_gamut_cs, camera_conversion_cat
    )

    # Combine the primaries and white samples to give us RGBW in the input plate gamut space
    rgbw_measurements_input_plate_gamut = np.concatenate(
        (measured_samples[Measurements.DESATURATED_RGB], [measured_samples[Measurements.GREY]])
    )

    rgbw_measurements_camera_native_gamut = colour.RGB_to_RGB(
        rgbw_measurements_input_plate_gamut, input_plate_cs, native_camera_gamut_cs, camera_conversion_cat
    )

    eotf_ramp_camera_native_gamut = colour.RGB_to_RGB(
        measured_samples[Measurements.EOTF_RAMP], input_plate_cs, native_camera_gamut_cs, camera_conversion_cat
    )

    eotf_ramp_camera_native_gamut = np.insert(
        eotf_ramp_camera_native_gamut, closest_18_percent_index, grey_measurements_native_camera_gamut,
        axis=0
    )

    rgbw_reference_samples = np.concatenate(
        (reference_samples[Measurements.DESATURATED_RGB], [reference_samples[Measurements.GREY]])
    )

    macbeth_reference_samples = reference_samples[Measurements.MACBETH]
    eotf_ramp_reference_samples = list(reference_samples[Measurements.EOTF_RAMP])
    eotf_ramp_reference_samples.insert(closest_18_percent_index, [peak_lum * 0.18, peak_lum * 0.18, peak_lum * 0.18])

    decoupled_lens_white_samples_camera_native_gamut = None
    if decoupled_lens_white_samples:
        decoupled_lens_white_samples_camera_native_gamut = colour.RGB_to_RGB(
            decoupled_lens_white_samples, input_plate_cs, native_camera_gamut_cs, camera_conversion_cat
        )

    return (
        eotf_ramp_camera_native_gamut,
        grey_measurements_native_camera_gamut,
        macbeth_measurements_camera_native_gamut,
        max_white_camera_native_gamut,
        rgbw_measurements_camera_native_gamut,
        eotf_signal_values,
        decoupled_lens_white_samples_camera_native_gamut,
        rgbw_reference_samples,
        macbeth_reference_samples,
        eotf_ramp_reference_samples
    )