From 7cc9174b86c490f355342691c3eba41c7b81e1ef Mon Sep 17 00:00:00 2001
From: Maximilian Reininghaus <maximilian.reininghaus@tu-dortmund.de>
Date: Sat, 16 Feb 2019 14:27:54 +0100
Subject: [PATCH] union of all NuclearCompositions of the Universe

---
 Documentation/Examples/cascade_example.cc | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/Documentation/Examples/cascade_example.cc b/Documentation/Examples/cascade_example.cc
index f9d1e95a8..1b40607c2 100644
--- a/Documentation/Examples/cascade_example.cc
+++ b/Documentation/Examples/cascade_example.cc
@@ -245,6 +245,22 @@ int main() {
 
   universe.AddChild(std::move(theMedium));
 
+  auto const allElementsInUniverse = std::invoke([&]() {
+    std::set<particles::Code> allElementsInUniverse;
+    auto collectElements = [&](auto& vtn) {
+      if (auto const mp = vtn.GetModelPropertiesPtr();
+          mp != nullptr) { // do not query Universe it self, it has no ModelProperties
+        auto const& comp = mp->GetNuclearComposition().GetComponents();
+        std::for_each(comp.cbegin(), comp.cend(),
+                      [&](particles::Code c) { allElementsInUniverse.insert(c); });
+      }
+    };
+    universe.walk(collectElements);
+    return allElementsInUniverse;
+  });
+
+  for (auto elem : allElementsInUniverse) { std::cout << elem << std::endl; }
+
   const CoordinateSystem& rootCS = env.GetCoordinateSystem();
 
   // setup processes, decays and interactions
-- 
GitLab