Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:17:26

0001 #include "PHRandomSeed.h"
0002 #include "recoConsts.h"
0003 
0004 #include <iostream>
0005 #include <memory>  // for allocator
0006 #include <queue>
0007 #include <random>
0008 
0009 namespace
0010 {
0011   std::queue<unsigned int> seedqueue;
0012   std::mt19937 fRandomGenerator;
0013   std::uniform_int_distribution<unsigned int> fDistribution;
0014 }  // namespace
0015 
0016 bool PHRandomSeed::fInitialized(false);
0017 bool PHRandomSeed::fFixed(false);
0018 int PHRandomSeed::verbose(1);
0019 
0020 unsigned int PHRandomSeed::GetSeed()
0021 {
0022   unsigned int iseed;
0023   if (!seedqueue.empty())
0024   {
0025     iseed = seedqueue.front();
0026     seedqueue.pop();
0027   }
0028   else
0029   {
0030     if (!fInitialized)
0031     {
0032       InitSeed();
0033     }
0034     if (fFixed)
0035     {
0036       iseed = fDistribution(fRandomGenerator);
0037     }
0038     else
0039     {
0040       std::random_device rdev;
0041       iseed = rdev();
0042     }
0043   }
0044   if (verbose)
0045   {
0046     std::cout << "PHRandomSeed::GetSeed() seed: " << iseed << std::endl;
0047   }
0048   return iseed;
0049 }
0050 
0051 void PHRandomSeed::InitSeed()
0052 {
0053   recoConsts *rc = recoConsts::instance();
0054   if (rc->FlagExist("RANDOMSEED"))
0055   {
0056     // fixed init seed
0057     const unsigned int seed = rc->get_IntFlag("RANDOMSEED");
0058     std::cout << "PHRandomSeed: using fixed seed " << seed << std::endl;
0059     fRandomGenerator.seed(seed);
0060     fFixed = true;
0061     fInitialized = true;
0062   }
0063 }
0064 
0065 void PHRandomSeed::LoadSeed(const unsigned int iseed)
0066 {
0067   seedqueue.push(iseed);
0068 }
0069 
0070 void PHRandomSeed::Verbosity(const int iverb)
0071 {
0072   verbose = iverb;
0073 }