use opossum::{ error::OpossumError, nodes::{BeamSplitter, Detector, Dummy, NodeReference, Source}, optic_scenery::OpticScenery, }; use std::fs::File; 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 bs = scenery.add_element("Beamspliiter", BeamSplitter::default()); let sample = scenery.add_element("sample", Dummy); let rf = NodeReference::from_node(scenery.node(sample)?); let r_sample = scenery.add_node(rf); let m1 = scenery.add_element("Mirror", Dummy); let m2 = scenery.add_element("Mirror", Dummy); let rf = NodeReference::from_node(scenery.node(bs)?); let r_bs = scenery.add_node(rf); let det = scenery.add_element("Detector", Detector::default()); scenery.connect_nodes(src, "out1", bs, "input1")?; scenery.connect_nodes(bs, "out1_trans1_refl2", sample, "front")?; scenery.connect_nodes(sample, "rear", m1, "front")?; scenery.connect_nodes(m1, "rear", r_sample, "front")?; scenery.connect_nodes(r_sample, "rear", r_bs, "input1")?; scenery.connect_nodes(bs, "out2_trans2_refl1", m2, "front")?; scenery.connect_nodes(m2, "rear", r_bs, "input2")?; scenery.connect_nodes(r_bs, "out1_trans1_refl2", det, "in1")?; let path = "michaelson.dot"; let mut output = File::create(path).unwrap(); write!(output, "{}", scenery.to_dot()).unwrap(); Ok(()) }