def test_calculate_resultant_spd() -> None:
    props = {
        "channels": {
            "A": {"name": "A", "type": "A", "port": 0},
            "B1": {"name": "B1", "type": "B", "port": 1},
            "B2": {"name": "B2", "type": "B", "port": 2},
        },
        "intensity_map_cm_umol": {"0": 200, "5": 150, "10": 100, "15": 50},
        "channel_types": {
            "A": {
                "name": "A",
                "relative_intensity_percent": 50,
                "spectrum_nm_percent": {
                    "380-399": 20,
                    "400-499": 20,
                    "500-599": 20,
                    "600-700": 20,
                    "701-780": 20,
                },
            },
            "B": {
                "name": "B",
                "relative_intensity_percent": 25,
                "spectrum_nm_percent": {
                    "380-399": 20,
                    "400-499": 20,
                    "500-599": 20,
                    "600-700": 20,
                    "701-780": 20,
                },
            },
        },
    }
    distance = 10
    # channel_spd_ndict = light.build_channel_spd_ndict(props, distance)
    setpoints = {"A": 100, "B1": 100, "B2": 100}
    reference_spectrum = {
        "380-399": 2.0, "400-499": 2.0, "500-599": 2.0, "600-700": 2.0, "701-780": 12.0
    }
    expected_spectrum = {
        "380-399": 20, "400-499": 20, "500-599": 20, "600-700": 20, "701-780": 20
    }
    expected_intensity = 100

    spectrum, intensity = light.calculate_resultant_spd(
        props, reference_spectrum, setpoints, distance
    )
    assert spectrum == expected_spectrum
    assert intensity == expected_intensity
Exemplo n.º 2
0
    def update_reported_variables(self) -> None:
        """Updates reported variables."""
        self.logger.debug("Updating reported variables")

        # Get previously used distance or default setup distance as average of min
        # and max calibrated distances
        if self.distance == None:

            # Get min/max distance for channels
            intensity_map = self.panel_properties.get(  # type: ignore
                "intensity_map_cm_umol", {})
            distance_list = []
            intensity_list = []
            for distance_, intensity in intensity_map.items():
                distance_list.append(float(distance_))
                intensity_list.append(intensity)
            min_distance = min(distance_list)
            max_distance = max(distance_list)

            # Set distance as average of min and max calibrated distances
            raw_distance = (min_distance + max_distance) / 2
            self.distance = round(raw_distance, 2)

        # Get previously used spectrum or default setup spectrum for reference spd
        if self.spectrum != None:
            reference_spectrum = self.spectrum
        else:
            for channel_key, channel_dict in self.channel_types.items():
                reference_spectrum = channel_dict.get("spectrum_nm_percent",
                                                      {})
                break

        # Calculate resultant spectrum and intensity
        self.spectrum, self.intensity = light.calculate_resultant_spd(  # type: ignore
            self.panel_properties,
            reference_spectrum,
            self.channel_setpoints,
            self.distance,
        )