IAP GITLAB

Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • AirShowerPhysics/corsika
  • rulrich/corsika
  • AAAlvesJr/corsika
  • Andre/corsika
  • arrabito/corsika
  • Nikos/corsika
  • olheiser73/corsika
  • AirShowerPhysics/papers/corsika
  • pranav/corsika
9 results
Show changes
Commits on Source (7)
Showing
with 59 additions and 41 deletions
...@@ -114,7 +114,7 @@ int main() { ...@@ -114,7 +114,7 @@ int main() {
// setup processes, decays and interactions // setup processes, decays and interactions
tracking_line::TrackingLine tracking; tracking_line::TrackingLine tracking;
random::RNGManager::GetInstance().RegisterRandomStream("s_rndm"); random::RNGManager::GetInstance().RegisterRandomStream("sibyll");
process::sibyll::Interaction sibyll; process::sibyll::Interaction sibyll;
process::sibyll::Decay decay; process::sibyll::Decay decay;
......
...@@ -133,7 +133,7 @@ int main() { ...@@ -133,7 +133,7 @@ int main() {
tracking_line::TrackingLine tracking; tracking_line::TrackingLine tracking;
stack_inspector::StackInspector<setup::Stack> stackInspect(1, true, E0); stack_inspector::StackInspector<setup::Stack> stackInspect(1, true, E0);
random::RNGManager::GetInstance().RegisterRandomStream("s_rndm"); random::RNGManager::GetInstance().RegisterRandomStream("sibyll");
random::RNGManager::GetInstance().RegisterRandomStream("pythia"); random::RNGManager::GetInstance().RegisterRandomStream("pythia");
process::sibyll::Interaction sibyll; process::sibyll::Interaction sibyll;
process::sibyll::NuclearInteraction sibyllNuc(sibyll, env); process::sibyll::NuclearInteraction sibyllNuc(sibyll, env);
......
...@@ -116,7 +116,7 @@ int main() { ...@@ -116,7 +116,7 @@ int main() {
tracking_line::TrackingLine tracking; tracking_line::TrackingLine tracking;
stack_inspector::StackInspector<setup::Stack> stackInspect(1, true, E0); stack_inspector::StackInspector<setup::Stack> stackInspect(1, true, E0);
random::RNGManager::GetInstance().RegisterRandomStream("s_rndm"); random::RNGManager::GetInstance().RegisterRandomStream("sibyll");
random::RNGManager::GetInstance().RegisterRandomStream("pythia"); random::RNGManager::GetInstance().RegisterRandomStream("pythia");
// process::sibyll::Interaction sibyll(env); // process::sibyll::Interaction sibyll(env);
process::pythia::Interaction pythia; process::pythia::Interaction pythia;
......
...@@ -56,10 +56,10 @@ using namespace corsika::units::si; ...@@ -56,10 +56,10 @@ using namespace corsika::units::si;
void registerRandomStreams() { void registerRandomStreams() {
random::RNGManager::GetInstance().RegisterRandomStream("cascade"); random::RNGManager::GetInstance().RegisterRandomStream("cascade");
random::RNGManager::GetInstance().RegisterRandomStream("qgran"); random::RNGManager::GetInstance().RegisterRandomStream("qgsjet");
random::RNGManager::GetInstance().RegisterRandomStream("s_rndm"); random::RNGManager::GetInstance().RegisterRandomStream("sibyll");
random::RNGManager::GetInstance().RegisterRandomStream("pythia"); random::RNGManager::GetInstance().RegisterRandomStream("pythia");
random::RNGManager::GetInstance().RegisterRandomStream("UrQMD"); random::RNGManager::GetInstance().RegisterRandomStream("urqmd");
random::RNGManager::GetInstance().SeedAll(); random::RNGManager::GetInstance().SeedAll();
} }
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
*/ */
#include <corsika/random/RNGManager.h> #include <corsika/random/RNGManager.h>
#include <sstream>
void corsika::random::RNGManager::RegisterRandomStream(std::string const& pStreamName) { void corsika::random::RNGManager::RegisterRandomStream(std::string const& pStreamName) {
corsika::random::RNG rng; corsika::random::RNG rng;
...@@ -20,7 +21,15 @@ void corsika::random::RNGManager::RegisterRandomStream(std::string const& pStrea ...@@ -20,7 +21,15 @@ void corsika::random::RNGManager::RegisterRandomStream(std::string const& pStrea
corsika::random::RNG& corsika::random::RNGManager::GetRandomStream( corsika::random::RNG& corsika::random::RNGManager::GetRandomStream(
std::string const& pStreamName) { std::string const& pStreamName) {
return rngs.at(pStreamName); if (IsRegistered(pStreamName)) {
return rngs.at(pStreamName);
} else { // this stream name is not in the map
throw std::runtime_error("'" + pStreamName + "' is not a registered stream.");
}
}
bool corsika::random::RNGManager::IsRegistered(std::string const& pStreamName) const {
return rngs.count(pStreamName) > 0;
} }
std::stringstream corsika::random::RNGManager::dumpState() const { std::stringstream corsika::random::RNGManager::dumpState() const {
...@@ -44,10 +53,3 @@ void corsika::random::RNGManager::SeedAll() { ...@@ -44,10 +53,3 @@ void corsika::random::RNGManager::SeedAll() {
entry.second.seed(sseq); entry.second.seed(sseq);
} }
} }
/*
void corsika::random::RNGManager::SetSeedSeq(std::string const& pStreamName,
std::seed_seq const& pSeedSeq) {
seeds[pStreamName] = pSeedSeq;
}
*/
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include <map> #include <map>
#include <random> #include <random>
#include <sstream>
#include <string> #include <string>
/*! /*!
...@@ -23,7 +22,10 @@ namespace corsika::random { ...@@ -23,7 +22,10 @@ namespace corsika::random {
using RNG = std::mt19937; //!< the actual RNG type that will be used using RNG = std::mt19937; //!< the actual RNG type that will be used
class RNGManager : public corsika::utl::Singleton<RNGManager> { /*!
* Manage random number generators.
*/
class RNGManager final : public corsika::utl::Singleton<RNGManager> {
friend class corsika::utl::Singleton<RNGManager>; friend class corsika::utl::Singleton<RNGManager>;
...@@ -48,17 +50,17 @@ namespace corsika::random { ...@@ -48,17 +50,17 @@ namespace corsika::random {
*/ */
RNG& GetRandomStream(std::string const& pStreamName); RNG& GetRandomStream(std::string const& pStreamName);
/*!
* Check whether a stream has been registered.
*/
bool IsRegistered(std::string const& pStreamName) const;
/*! /*!
* dumps the names and states of all registered random-number streams * dumps the names and states of all registered random-number streams
* into a std::stringstream. * into a std::stringstream.
*/ */
std::stringstream dumpState() const; std::stringstream dumpState() const;
/**
* 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 * Set explicit seeds for all currently registered streams. The actual seed values
* are incremented from \a vSeed. * are incremented from \a vSeed.
......
...@@ -23,18 +23,32 @@ SCENARIO("random-number streams can be registered and retrieved") { ...@@ -23,18 +23,32 @@ SCENARIO("random-number streams can be registered and retrieved") {
GIVEN("a RNGManager") { GIVEN("a RNGManager") {
RNGManager& rngManager = RNGManager::GetInstance(); RNGManager& rngManager = RNGManager::GetInstance();
WHEN("a sequence is registered by name") { WHEN("the sequence name is not registered") {
rngManager.RegisterRandomStream("stream_A"); REQUIRE(rngManager.IsRegistered("stream_A") == false);
THEN("the sequence can be retrieved") { THEN("a sequence is registered by name") {
REQUIRE_NOTHROW(rngManager.GetRandomStream("stream_A")); rngManager.RegisterRandomStream("stream_A");
}
THEN("an unknown sequence cannot be retrieved") { THEN("the sequence can be retrieved") {
REQUIRE_THROWS(rngManager.GetRandomStream("stream_UNKNOWN")); REQUIRE_NOTHROW(rngManager.GetRandomStream("stream_A"));
}
THEN("we can check that the sequence exists") {
REQUIRE_NOTHROW(rngManager.GetRandomStream("stream_A"));
// seeding not covered yet THEN("an unknown sequence cannot be retrieved") {
REQUIRE(rngManager.IsRegistered("stream_A") == true);
THEN("an unknown sequence cannot be retrieved") {
REQUIRE_THROWS(rngManager.GetRandomStream("stream_UNKNOWN"));
THEN("an unknown sequence is not registered") {
REQUIRE(rngManager.IsRegistered("stream_UNKNOWN") == false);
}
}
}
}
}
}
} }
} }
} }
......
...@@ -27,7 +27,7 @@ using namespace corsika::units::si; ...@@ -27,7 +27,7 @@ using namespace corsika::units::si;
TEST_CASE("CONEXSourceCut") { TEST_CASE("CONEXSourceCut") {
random::RNGManager::GetInstance().RegisterRandomStream("cascade"); random::RNGManager::GetInstance().RegisterRandomStream("cascade");
random::RNGManager::GetInstance().RegisterRandomStream("s_rndm"); random::RNGManager::GetInstance().RegisterRandomStream("sibyll");
feenableexcept(FE_INVALID); feenableexcept(FE_INVALID);
......
...@@ -55,7 +55,7 @@ namespace corsika::process::qgsjetII { ...@@ -55,7 +55,7 @@ namespace corsika::process::qgsjetII {
private: private:
corsika::random::RNG& rng_ = corsika::random::RNG& rng_ =
corsika::random::RNGManager::GetInstance().GetRandomStream("qgran"); corsika::random::RNGManager::GetInstance().GetRandomStream("qgsjet");
static constexpr int maxMassNumber_ = 208; static constexpr int maxMassNumber_ = 208;
}; };
......
...@@ -26,7 +26,7 @@ datadir::datadir(const std::string& dir) { ...@@ -26,7 +26,7 @@ datadir::datadir(const std::string& dir) {
double qgran_(int&) { double qgran_(int&) {
static corsika::random::RNG& rng = static corsika::random::RNG& rng =
corsika::random::RNGManager::GetInstance().GetRandomStream("qgran"); corsika::random::RNGManager::GetInstance().GetRandomStream("qgsjet");
std::uniform_real_distribution<double> dist; std::uniform_real_distribution<double> dist;
return dist(rng); return dist(rng);
......
...@@ -117,7 +117,7 @@ TEST_CASE("QgsjetIIInterface", "[processes]") { ...@@ -117,7 +117,7 @@ TEST_CASE("QgsjetIIInterface", "[processes]") {
const geometry::CoordinateSystem& cs = env.GetCoordinateSystem(); const geometry::CoordinateSystem& cs = env.GetCoordinateSystem();
corsika::random::RNGManager::GetInstance().RegisterRandomStream("qgran"); corsika::random::RNGManager::GetInstance().RegisterRandomStream("qgsjet");
SECTION("InteractionInterface") { SECTION("InteractionInterface") {
......
...@@ -57,7 +57,7 @@ namespace corsika::process::sibyll { ...@@ -57,7 +57,7 @@ namespace corsika::process::sibyll {
private: private:
corsika::random::RNG& RNG_ = corsika::random::RNG& RNG_ =
corsika::random::RNGManager::GetInstance().GetRandomStream("s_rndm"); corsika::random::RNGManager::GetInstance().GetRandomStream("sibyll");
const corsika::units::si::HEPEnergyType minEnergyCoM_ = const corsika::units::si::HEPEnergyType minEnergyCoM_ =
10. * 1e9 * corsika::units::si::electronvolt; 10. * 1e9 * corsika::units::si::electronvolt;
......
...@@ -60,7 +60,7 @@ namespace corsika::process::sibyll { ...@@ -60,7 +60,7 @@ namespace corsika::process::sibyll {
corsika::process::sibyll::Interaction& hadronicInteraction_; corsika::process::sibyll::Interaction& hadronicInteraction_;
std::map<corsika::particles::Code, int> targetComponentsIndex_; std::map<corsika::particles::Code, int> targetComponentsIndex_;
corsika::random::RNG& RNG_ = corsika::random::RNG& RNG_ =
corsika::random::RNGManager::GetInstance().GetRandomStream("s_rndm"); corsika::random::RNGManager::GetInstance().GetRandomStream("sibyll");
static constexpr int gNSample_ = static constexpr int gNSample_ =
500; // number of samples in MC estimation of cross section 500; // number of samples in MC estimation of cross section
static constexpr int gMaxNucleusAProjectile_ = 56; static constexpr int gMaxNucleusAProjectile_ = 56;
......
...@@ -16,7 +16,7 @@ double get_sibyll_mass2(int& id) { return s_mass1_.am2[abs(id) - 1]; } ...@@ -16,7 +16,7 @@ double get_sibyll_mass2(int& id) { return s_mass1_.am2[abs(id) - 1]; }
double s_rndm_(int&) { double s_rndm_(int&) {
static corsika::random::RNG& rng = static corsika::random::RNG& rng =
corsika::random::RNGManager::GetInstance().GetRandomStream("s_rndm"); corsika::random::RNGManager::GetInstance().GetRandomStream("sibyll");
std::uniform_real_distribution<double> dist; std::uniform_real_distribution<double> dist;
return dist(rng); return dist(rng);
......
...@@ -115,7 +115,7 @@ TEST_CASE("SibyllInterface", "[processes]") { ...@@ -115,7 +115,7 @@ TEST_CASE("SibyllInterface", "[processes]") {
const geometry::CoordinateSystem& cs = env.GetCoordinateSystem(); const geometry::CoordinateSystem& cs = env.GetCoordinateSystem();
random::RNGManager::GetInstance().RegisterRandomStream("s_rndm"); random::RNGManager::GetInstance().RegisterRandomStream("sibyll");
SECTION("InteractionInterface") { SECTION("InteractionInterface") {
......
...@@ -358,7 +358,7 @@ corsika::process::EProcessReturn UrQMD::DoInteraction(SetupProjectile& projectil ...@@ -358,7 +358,7 @@ corsika::process::EProcessReturn UrQMD::DoInteraction(SetupProjectile& projectil
*/ */
double corsika::process::UrQMD::ranf_(int&) { double corsika::process::UrQMD::ranf_(int&) {
static corsika::random::RNG& rng = static corsika::random::RNG& rng =
corsika::random::RNGManager::GetInstance().GetRandomStream("UrQMD"); corsika::random::RNGManager::GetInstance().GetRandomStream("urqmd");
static std::uniform_real_distribution<double> dist; static std::uniform_real_distribution<double> dist;
return dist(rng); return dist(rng);
......
...@@ -49,7 +49,7 @@ namespace corsika::process::UrQMD { ...@@ -49,7 +49,7 @@ namespace corsika::process::UrQMD {
void readXSFile(std::string const&); void readXSFile(std::string const&);
corsika::random::RNG& rng_ = corsika::random::RNG& rng_ =
corsika::random::RNGManager::GetInstance().GetRandomStream("UrQMD"); corsika::random::RNGManager::GetInstance().GetRandomStream("urqmd");
std::uniform_int_distribution<int> booleanDist_{0, 1}; std::uniform_int_distribution<int> booleanDist_{0, 1};
boost::multi_array<corsika::units::si::CrossSectionType, 3> xs_interp_support_table_; boost::multi_array<corsika::units::si::CrossSectionType, 3> xs_interp_support_table_;
......
...@@ -130,7 +130,7 @@ TEST_CASE("UrQMD") { ...@@ -130,7 +130,7 @@ TEST_CASE("UrQMD") {
} }
feenableexcept(FE_INVALID); feenableexcept(FE_INVALID);
corsika::random::RNGManager::GetInstance().RegisterRandomStream("UrQMD"); corsika::random::RNGManager::GetInstance().RegisterRandomStream("urqmd");
UrQMD urqmd; UrQMD urqmd;
SECTION("interaction length") { SECTION("interaction length") {
......