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

Add name attrib to EnergyMeter.

parent 7ba9ff9f
No related branches found
No related tags found
1 merge request!7Draft: Resolve "Implement rudimental serialization of OpticScenery"
Pipeline #7435 passed
......@@ -5,7 +5,7 @@ use opossum::{
analyzer::AnalyzerEnergy,
error::OpossumError,
lightdata::{DataEnergy, LightData},
nodes::{BeamSplitter, Detector, EnergyMeter, FilterType, IdealFilter, Source, Spectrometer},
nodes::{BeamSplitter, EnergyMeter, FilterType, IdealFilter, Source, Spectrometer},
spectrum::{create_he_ne_spectrum, Spectrum},
OpticScenery,
};
......@@ -23,9 +23,9 @@ fn main() -> Result<(), OpossumError> {
let i_bs = scenery.add_node(BeamSplitter::new(0.6).unwrap());
let filter_spectrum = Spectrum::from_csv("NE03B.csv")?;
let i_f = scenery.add_node(IdealFilter::new(FilterType::Spectrum(filter_spectrum))?);
let i_d1 = scenery.add_node(Detector::default()); // Energy meter 1
let i_d1 = scenery.add_node(EnergyMeter::new("Energy meter 1", opossum::nodes::Metertype::IdealEnergyMeter));
let i_d2 = scenery.add_node(Spectrometer::default());
let i_d3 = scenery.add_node(EnergyMeter::default()); // Energy meter 2
let i_d3 = scenery.add_node(EnergyMeter::new("Energy meter 2", opossum::nodes::Metertype::IdealEnergyMeter));
scenery.connect_nodes(i_s, "out1", i_bs, "input1")?;
scenery.connect_nodes(i_bs, "out1_trans1_refl2", i_d1, "in1")?;
......
......@@ -23,7 +23,7 @@ pub enum Metertype {
/// an ideal power meter (currently not used)
IdealPowerMeter,
}
#[derive(Default, Serialize)]
#[derive(Serialize)]
/// (ideal) energy / power meter.
///
/// It normally measures the total energy of the incoming light regardless of the wavelength, position, angle, polarization etc...
......@@ -39,13 +39,25 @@ pub enum Metertype {
pub struct EnergyMeter {
light_data: Option<LightData>,
meter_type: Metertype,
name: String,
}
impl Default for EnergyMeter {
fn default() -> Self {
Self {
light_data: Default::default(),
meter_type: Default::default(),
name: "energy meter".to_string(),
}
}
}
impl EnergyMeter {
/// Creates a new [`EnergyMeter`] of the given [`Metertype`].
pub fn new(meter_type: Metertype) -> Self {
pub fn new(name: &str, meter_type: Metertype) -> Self {
EnergyMeter {
light_data: None,
meter_type,
name: name.to_string(),
}
}
/// Returns the meter type of this [`EnergyMeter`].
......@@ -58,6 +70,12 @@ impl EnergyMeter {
}
}
impl Optical for EnergyMeter {
fn set_name(&mut self, name: &str) {
self.name = name.to_string()
}
fn name(&self) -> &str {
&self.name
}
fn node_type(&self) -> &str {
"energy meter"
}
......@@ -110,7 +128,7 @@ mod test {
use super::*;
#[test]
fn new() {
let meter = EnergyMeter::new(Metertype::IdealEnergyMeter);
let meter = EnergyMeter::new("test", Metertype::IdealEnergyMeter);
assert!(meter.light_data.is_none());
assert_eq!(meter.meter_type, Metertype::IdealEnergyMeter);
}
......@@ -122,28 +140,29 @@ mod test {
assert_eq!(meter.node_type(), "energy meter");
assert_eq!(meter.is_detector(), true);
assert_eq!(meter.node_color(), "lightblue");
assert_eq!(meter.name(), "energy meter");
}
#[test]
fn meter_type() {
let meter = EnergyMeter::new(Metertype::IdealEnergyMeter);
let meter = EnergyMeter::new("test", Metertype::IdealEnergyMeter);
assert_eq!(meter.meter_type(), Metertype::IdealEnergyMeter);
}
#[test]
fn set_meter_type() {
let mut meter = EnergyMeter::new(Metertype::IdealEnergyMeter);
let mut meter = EnergyMeter::new("test", Metertype::IdealEnergyMeter);
meter.set_meter_type(Metertype::IdealPowerMeter);
assert_eq!(meter.meter_type, Metertype::IdealPowerMeter);
}
#[test]
fn ports() {
let meter = EnergyMeter::new(Metertype::IdealEnergyMeter);
let meter = EnergyMeter::new("test", Metertype::IdealEnergyMeter);
let ports = meter.ports();
assert_eq!(ports.inputs(), vec!["in1"]);
assert_eq!(ports.outputs(), vec!["out1"]);
}
#[test]
fn analyze() {
let mut meter = EnergyMeter::new(Metertype::IdealEnergyMeter);
let mut meter = EnergyMeter::new("test", Metertype::IdealEnergyMeter);
let mut input = LightResult::default();
input.insert(
"in1".into(),
......
......@@ -6,11 +6,9 @@ use crate::light::Light;
use crate::lightdata::LightData;
use crate::optical::LightResult;
use crate::{optic_ports::OpticPorts, optical::Optical, optical::OpticRef};
use serde::Serialize;
use petgraph::prelude::{DiGraph, EdgeIndex, NodeIndex};
use petgraph::visit::EdgeRef;
use petgraph::{algo::*, Direction};
use serde::ser::SerializeStruct;
use serde_derive::Serialize;
use std::cell::RefCell;
use std::collections::HashMap;
......
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