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

OpticSceneray: Reenable analysis function.

Source: add name parameter.
parent 47e1c582
No related branches found
No related tags found
1 merge request!7Draft: Resolve "Implement rudimental serialization of OpticScenery"
Pipeline #7410 failed
......@@ -14,15 +14,14 @@ fn main() -> Result<(), OpossumError> {
let mut scenery = OpticScenery::new();
scenery.set_description("beam combiner demo");
let i_s1 = scenery.add_element(
let i_s1 = scenery.add_node(Source::new(
"Source 1",
Source::new(LightData::Energy(DataEnergy {
LightData::Energy(DataEnergy {
spectrum: create_he_ne_spectrum(1.0),
})),
);
let i_s2 = scenery.add_element(
"Source 2",
Source::new(LightData::Energy(DataEnergy {
}),
));
let i_s2 = scenery.add_node(
Source::new("Source 2", LightData::Energy(DataEnergy {
spectrum: create_nd_glass_spectrum(1.0),
})),
);
......
......@@ -5,7 +5,7 @@ use opossum::{
analyzer::AnalyzerEnergy,
error::OpossumError,
lightdata::{DataEnergy, LightData},
nodes::{BeamSplitter, Detector, FilterType, IdealFilter, Source, EnergyMeter, Spectrometer},
nodes::{BeamSplitter, Detector, EnergyMeter, FilterType, IdealFilter, Source, Spectrometer},
spectrum::{create_he_ne_spectrum, Spectrum},
OpticScenery,
};
......@@ -14,12 +14,12 @@ fn main() -> Result<(), OpossumError> {
let mut scenery = OpticScenery::new();
scenery.set_description("filter system demo");
let i_s = scenery.add_element(
let i_s = scenery.add_node(Source::new(
"Source",
Source::new(LightData::Energy(DataEnergy {
LightData::Energy(DataEnergy {
spectrum: create_he_ne_spectrum(1.0),
})),
);
}),
));
let i_bs = scenery.add_element("Beam splitter", BeamSplitter::new(0.6).unwrap());
let filter_spectrum = Spectrum::from_csv("NE03B.csv")?;
let i_f = scenery.add_element(
......
......@@ -13,9 +13,8 @@ fn main() -> Result<(), OpossumError> {
let mut scenery = OpticScenery::new();
scenery.set_description("Inverse Group test".into());
let i_s = scenery.add_element(
"Source",
Source::new(LightData::Energy(DataEnergy {
let i_s = scenery.add_node(
Source::new("Source", LightData::Energy(DataEnergy {
spectrum: create_he_ne_spectrum(1.0),
})),
);
......
......@@ -9,7 +9,7 @@ use std::io::Write;
fn main() -> Result<(), OpossumError> {
let mut scenery = OpticScenery::new();
scenery.set_description("Michaelson interferomater");
let src = scenery.add_element("Source", Source::default());
let src = scenery.add_node(Source::default());
let bs = scenery.add_element("Beamspliiter", BeamSplitter::default());
let sample = scenery.add_node(Dummy::new("Sample"));
let rf = NodeReference::from_node(scenery.node(sample)?);
......
......@@ -25,6 +25,7 @@ type Result<T> = std::result::Result<T, OpossumError>;
#[derive(Default, Serialize)]
pub struct Source {
light_data: Option<LightData>,
name: String
}
impl Source {
......@@ -42,9 +43,10 @@ impl Source {
///
/// let source=Source::new(LightData::Energy(DataEnergy {spectrum: create_he_ne_spectrum(1.0)}));
/// ```
pub fn new(light: LightData) -> Self {
pub fn new(name: &str, light: LightData) -> Self {
Source {
light_data: Some(light),
name: name.to_owned()
}
}
......
use std::cell::{Ref, RefCell};
use std::collections::HashMap;
use std::rc::Rc;
......@@ -44,8 +43,7 @@ impl OpticScenery {
/// it to existing nodes in the graph. The given optical element is consumed (owned) by the [`OpticScenery`]. Internally the corresponding [`OpticNode`] is
/// automatically generated. It serves as a short-cut to the `add_node` function.
pub fn add_element<T: OpticComponent + 'static>(&mut self, name: &str, t: T) -> NodeIndex {
self.g
.add_node(Rc::new(RefCell::new(t)))
self.g.add_node(Rc::new(RefCell::new(t)))
}
/// Connect (already existing) nodes denoted by the respective `NodeIndex`.
///
......@@ -128,7 +126,7 @@ impl OpticScenery {
///
/// # Errors
///
/// This function will return [`OpossumError::OpticScenery`]if the node does not exist.
/// This function will return [`OpossumError::OpticScenery`] if the node does not exist.
pub fn node(&self, node: NodeIndex) -> Result<Rc<RefCell<dyn Optical>>> {
if let Some(node) = self.g.node_weight(node) {
Ok(node.clone())
......@@ -186,7 +184,7 @@ impl OpticScenery {
// let group_node: &NodeGroup = self.cast_node_to_group(&node)?;
// Ok(group_node.get_mapped_port_str(light_port, parent_identifier)?)
// } else {
Ok(format!("i{}:{}", end_node.index(), light_port))
Ok(format!("i{}:{}", end_node.index(), light_port))
// }
}
......@@ -228,10 +226,7 @@ impl OpticScenery {
for idx in sorted {
let node = self.g.node_weight(idx).unwrap();
let incoming_edges: HashMap<String, Option<LightData>> = self.incoming_edges(idx);
let outgoing_edges: HashMap<String, Option<LightData>> = HashMap::new();
// node.borrow_mut()
// .analyze(incoming_edges, analyzer_type)?;
let outgoing_edges = node.borrow_mut().analyze(incoming_edges, analyzer_type)?;
for outgoing_edge in outgoing_edges {
self.set_outgoing_edge_data(idx, outgoing_edge.0, outgoing_edge.1)
}
......
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