From f6d1a9ce984bc77465daf53a4cf056d413f7584c Mon Sep 17 00:00:00 2001
From: Udo Eisenbarth <u.eisenbarth@gsi.de>
Date: Fri, 28 Jul 2023 16:45:45 +0200
Subject: [PATCH] Add group node example.

Analysis seems to work. Display of graph wrong.
---
 Cargo.lock             |  8 +++----
 examples/group_test.rs | 51 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+), 4 deletions(-)
 create mode 100644 examples/group_test.rs

diff --git a/Cargo.lock b/Cargo.lock
index f3730bb2..e723310a 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -806,15 +806,15 @@ dependencies = [
 
 [[package]]
 name = "serde"
-version = "1.0.175"
+version = "1.0.177"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d25439cd7397d044e2748a6fe2432b5e85db703d6d097bd014b3c0ad1ebff0b"
+checksum = "63ba2516aa6bf82e0b19ca8b50019d52df58455d3cf9bdaf6315225fdd0c560a"
 
 [[package]]
 name = "serde_derive"
-version = "1.0.175"
+version = "1.0.177"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b23f7ade6f110613c0d63858ddb8b94c1041f550eab58a16b371bdf2c9c80ab4"
+checksum = "401797fe7833d72109fedec6bfcbe67c0eed9b99772f26eb8afd261f0abc6fd3"
 dependencies = [
  "proc-macro2",
  "quote",
diff --git a/examples/group_test.rs b/examples/group_test.rs
new file mode 100644
index 00000000..f79b2ef2
--- /dev/null
+++ b/examples/group_test.rs
@@ -0,0 +1,51 @@
+use std::fs::File;
+use std::io::Write;
+
+use opossum::{
+    analyzer::AnalyzerEnergy,
+    error::OpossumError,
+    lightdata::{DataEnergy, LightData},
+    nodes::{Detector, Dummy, NodeGroup, Source},
+    optic_node::OpticNode,
+    optic_scenery::OpticScenery,
+    spectrum::create_he_ne_spectrum,
+};
+
+fn main() -> Result<(), OpossumError> {
+    let mut scenery = OpticScenery::new();
+    scenery.set_description("optic group demo");
+
+    let i_s = scenery.add_element(
+        "Source",
+        Source::new(LightData::Energy(DataEnergy {
+            spectrum: create_he_ne_spectrum(1.0),
+        })),
+    );
+    let i_d = scenery.add_element("Detector", Detector::default());
+
+    let mut group = NodeGroup::new();
+    let i_g_d1 = group.add_node(OpticNode::new("dummy1", Dummy));
+    let i_g_d2 = group.add_node(OpticNode::new("dummy2", Dummy));
+    group.connect_nodes(i_g_d1, "rear", i_g_d2, "front")?;
+    group.map_input_port(i_g_d1, "front", "input")?;
+    group.map_output_port(i_g_d2, "rear", "output")?;
+    let i_g = scenery.add_element("test group", group);
+
+    scenery.connect_nodes(i_s, "out1", i_g, "input")?;
+    scenery.connect_nodes(i_g, "output", i_d, "in1")?;
+
+    let path = "group_test.dot";
+    let mut output = File::create(path).unwrap();
+    write!(output, "{}", scenery.to_dot()).unwrap();
+
+    scenery.report();
+    println!("");
+    let mut analyzer = AnalyzerEnergy::new(&scenery);
+    print!("Analyze...");
+    analyzer.analyze()?;
+    println!("Sucessful");
+    println!("");
+    scenery.report();
+
+    Ok(())
+}
-- 
GitLab