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
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, )