diff --git a/Framework/Random/RNGManager.cc b/Framework/Random/RNGManager.cc index ddcccae37171c36c93158af286f85de91a75b6d4..1291dfd44f02300e06bccdcc9f9fc0c376ab2d56 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 da630c2531a2cb0dc5702dee9b837ba3aa13b99d..5d17a930483f003a8d92397ee055401d8739ac16 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