Newer
Older
use crate::lightdata::LightData;
type Result<T> = std::result::Result<T, OpossumError>;
/// This node represents an universal detector (so far for test / debugging purposes).
/// Any [`LightData`] coming in will be stored internally for later display / export.
///
/// ## Optical Ports
/// - Inputs
/// - `in1`
/// - Outputs
///
/// During analysis, the output port contains a replica of the input port similar to a [`Dummy`](crate::nodes::Dummy) node. This way,
/// different dectector nodes can be "stacked" or used somewhere in between arbitrary optic nodes.
}
fn create_default_props() -> Properties {
let mut props = Properties::default();
props
}
impl Default for Detector {
fn default() -> Self {
Self {
light_data: Default::default(),
props: create_default_props(),
}
}
fn ports(&self) -> OpticPorts {
let mut ports = OpticPorts::new();
ports.add_input("in1").unwrap();
ports
}
fn analyze(
&mut self,
incoming_data: LightResult,
_analyzer_type: &crate::analyzer::AnalyzerType,
) -> Result<LightResult> {
if let Some(data) = incoming_data.get("in1") {
self.light_data = data.clone();
Ok(HashMap::from([("out1".into(), data.clone())]))
} else {
Ok(HashMap::from([("out2".into(), None)]))
if let Some(data) = &self.light_data {
let mut file_path = PathBuf::from(report_dir);
file_path.push(format!("spectrum_{}.svg", self.name()));
data.export(&file_path)
fn properties(&self) -> &Properties {
&self.props
}
fn set_property(&mut self, name: &str, prop: Property) -> Result<()> {
if self.props.set(name, prop).is_none() {
Err(OpossumError::Other("property not defined".into()))
} else {
Ok(())
}
}
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match &self.light_data {
Some(data) => write!(f, "{}", data),
None => write!(f, "no data"),
}
}
}
fn node_color(&self) -> &str {
"lemonchiffon"