From 5c8f6e77ebb18071722454c41cc402b58218526f Mon Sep 17 00:00:00 2001
From: Maximilian Reininghaus <maximilian.reininghaus@kit.edu>
Date: Thu, 23 May 2019 19:44:30 -0300
Subject: [PATCH] simple-minded seed mechanism

---
 Framework/Random/RNGManager.cc | 14 ++++++++++++++
 Framework/Random/RNGManager.h  |  8 ++++++++
 2 files changed, 22 insertions(+)

diff --git a/Framework/Random/RNGManager.cc b/Framework/Random/RNGManager.cc
index ddcccae37..1291dfd44 100644
--- a/Framework/Random/RNGManager.cc
+++ b/Framework/Random/RNGManager.cc
@@ -33,6 +33,20 @@ std::stringstream corsika::random::RNGManager::dumpState() const {
 
   return buffer;
 }
+
+void corsika::random::RNGManager::SeedAll(uint64_t vSeed) {
+  for (auto& entry : rngs) { entry.second.seed(vSeed++); }
+}
+
+void corsika::random::RNGManager::SeedAll() {
+  std::random_device rd;
+
+  for (auto& entry : rngs) {
+    std::seed_seq sseq{rd(), rd(), rd(), rd(), rd(), rd()};
+    entry.second.seed(sseq);
+  }
+}
+
 /*
 void corsika::random::RNGManager::SetSeedSeq(std::string const& pStreamName,
                                              std::seed_seq const& pSeedSeq) {
diff --git a/Framework/Random/RNGManager.h b/Framework/Random/RNGManager.h
index da630c253..5d17a9304 100644
--- a/Framework/Random/RNGManager.h
+++ b/Framework/Random/RNGManager.h
@@ -61,6 +61,14 @@ namespace corsika::random {
      * set seed_seq of \a pStreamName to \a pSeedSeq
      */
     // void SetSeedSeq(std::string const& pStreamName, std::seed_seq& const pSeedSeq);
+
+    /**
+     * Set explicit seeds for all currently registered streams. The actual seed values
+     * are incremented from \a vSeed.
+     */
+    void SeedAll(uint64_t vSeed);
+
+    void SeedAll(); //!< seed all currently registered streams with "real" randomness
   };
 
 } // namespace corsika::random
-- 
GitLab