Skip to content
Snippets Groups Projects
Commit 6c5bfe2c authored by Udo Eisenbarth's avatar Udo Eisenbarth :speech_balloon:
Browse files

Implement Debug trait for Sepctrometer.

This is only a preliminary solution until we have a general reporting.
parent 2ee9a9df
No related branches found
No related tags found
1 merge request!4Resolve "Add detector node "spectrometer""
Pipeline #7337 passed
...@@ -5,7 +5,7 @@ use opossum::{ ...@@ -5,7 +5,7 @@ use opossum::{
analyzer::AnalyzerEnergy, analyzer::AnalyzerEnergy,
error::OpossumError, error::OpossumError,
lightdata::{DataEnergy, LightData}, lightdata::{DataEnergy, LightData},
nodes::{BeamSplitter, Detector, FilterType, IdealFilter, Source, EnergyMeter}, nodes::{BeamSplitter, Detector, FilterType, IdealFilter, Source, EnergyMeter, Spectrometer},
spectrum::{create_he_ne_spectrum, Spectrum}, spectrum::{create_he_ne_spectrum, Spectrum},
OpticScenery, OpticScenery,
}; };
...@@ -27,7 +27,7 @@ fn main() -> Result<(), OpossumError> { ...@@ -27,7 +27,7 @@ fn main() -> Result<(), OpossumError> {
IdealFilter::new(FilterType::Spectrum(filter_spectrum))?, IdealFilter::new(FilterType::Spectrum(filter_spectrum))?,
); );
let i_d1 = scenery.add_element("Detector 1", Detector::default()); let i_d1 = scenery.add_element("Detector 1", Detector::default());
let i_d2 = scenery.add_element("Detector 2", Detector::default()); let i_d2 = scenery.add_element("Detector 2", Spectrometer::default());
let i_d3 = scenery.add_element("Detector 3", EnergyMeter::default()); let i_d3 = scenery.add_element("Detector 3", EnergyMeter::default());
scenery.connect_nodes(i_s, "out1", i_bs, "input1")?; scenery.connect_nodes(i_s, "out1", i_bs, "input1")?;
......
use uom::si::length::nanometer;
use crate::lightdata::LightData; use crate::lightdata::LightData;
use crate::{ use crate::{
error::OpossumError, error::OpossumError,
...@@ -88,20 +90,32 @@ impl Optical for Spectrometer { ...@@ -88,20 +90,32 @@ impl Optical for Spectrometer {
impl Debug for Spectrometer { impl Debug for Spectrometer {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match &self.light_data { match &self.light_data {
Some(data) => write!(f, "{} (Type: {:?})", data, self.spectrometer_type), Some(data) => match data {
LightData::Energy(data_energy) => {
let spectrum_range = data_energy.spectrum.range();
write!(
f,
"Spectrum {:.3} - {:.3} nm (Type: {:?})",
spectrum_range.start.get::<nanometer>(),
spectrum_range.end.get::<nanometer>(),
self.spectrometer_type
)
}
_ => write!(f, "no spectrum data to display"),
},
None => write!(f, "no data"), None => write!(f, "no data"),
} }
} }
} }
impl Dottable for Spectrometer { impl Dottable for Spectrometer {
fn node_color(&self) -> &str { fn node_color(&self) -> &str {
"lightblue" "lightseagreen"
} }
} }
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use crate::{lightdata::DataEnergy, spectrum::create_he_ne_spectrum, analyzer::AnalyzerType}; use crate::{analyzer::AnalyzerType, lightdata::DataEnergy, spectrum::create_he_ne_spectrum};
use super::*; use super::*;
#[test] #[test]
...@@ -117,12 +131,15 @@ mod test { ...@@ -117,12 +131,15 @@ mod test {
assert_eq!(meter.spectrometer_type, SpectrometerType::IdealSpectrometer); assert_eq!(meter.spectrometer_type, SpectrometerType::IdealSpectrometer);
assert_eq!(meter.node_type(), "spectrometer"); assert_eq!(meter.node_type(), "spectrometer");
assert_eq!(meter.is_detector(), true); assert_eq!(meter.is_detector(), true);
assert_eq!(meter.node_color(), "XXX"); assert_eq!(meter.node_color(), "lightseagreen");
} }
#[test] #[test]
fn meter_type() { fn meter_type() {
let meter = Spectrometer::new(SpectrometerType::IdealSpectrometer); let meter = Spectrometer::new(SpectrometerType::IdealSpectrometer);
assert_eq!(meter.spectrometer_type(), SpectrometerType::IdealSpectrometer); assert_eq!(
meter.spectrometer_type(),
SpectrometerType::IdealSpectrometer
);
} }
#[test] #[test]
fn set_meter_type() { fn set_meter_type() {
...@@ -147,7 +164,7 @@ mod test { ...@@ -147,7 +164,7 @@ mod test {
spectrum: create_he_ne_spectrum(1.0), spectrum: create_he_ne_spectrum(1.0),
})), })),
); );
let result=meter.analyze(input, &AnalyzerType::Energy); let result = meter.analyze(input, &AnalyzerType::Energy);
assert!(result.is_ok()); assert!(result.is_ok());
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment