Skip to content

Commit

Permalink
Add comments for uniqueID svc (#83)
Browse files Browse the repository at this point in the history
* Add Unique ID generation service
  • Loading branch information
fdplacido committed May 20, 2022
1 parent d6555ad commit 73edff3
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 10 deletions.
16 changes: 10 additions & 6 deletions k4FWCore/components/UniqueIDGenSvc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,22 @@ StatusCode UniqueIDGenSvc::initialize() {
}

const size_t bits32 = std::numeric_limits<uint32_t>::digits;
const size_t bits64 = std::numeric_limits<uint64_t>::digits;
const size_t bitsSizeT = std::numeric_limits<size_t>::digits;

size_t UniqueIDGenSvc::getUniqueID(
uint32_t evt_num, uint32_t run_num, std::string name) const
uint32_t evt_num, uint32_t run_num, const std::string& name) const
{
std::bitset<bits32> event_num_bits(evt_num);
std::bitset<bits32> run_num_bits(run_num);
std::bitset<bits64> seed_bits(this->m_seed);
std::bitset<bits32> event_num_bits(evt_num), run_num_bits(run_num);
size_t str_hash = std::hash<std::string>{}(name);
std::bitset<bitsSizeT> name_bits(str_hash);

std::bitset<bits64+bits32+bits32+bitsSizeT> combined_bits(
seed_bits.to_string() +
event_num_bits.to_string() +
run_num_bits.to_string() +
name_bits.to_string());

std::bitset<bits32+bits32+bitsSizeT> combined_bits(event_num_bits.to_string() + run_num_bits.to_string() + name_bits.to_string());

return std::hash<std::bitset<bits32+bits32+bitsSizeT>>{}(combined_bits);
return std::hash<std::bitset<bits64+bits32+bits32+bitsSizeT>>{}(combined_bits);
}
11 changes: 10 additions & 1 deletion k4FWCore/components/UniqueIDGenSvc.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,20 @@
#include <GaudiKernel/Service.h>
#include "k4Interface/IUniqueIDGenSvc.h"


/** @class UniqueIDGenSvc
* Generate unique, reproducible numbers using
* event number, run number, algorithm name, and global seed.
* To be used as reproducible per event seeds for random number generators used inside algorithms.
*
*/
class UniqueIDGenSvc : public extends<Service, IUniqueIDGenSvc> {
public:
UniqueIDGenSvc(const std::string& name, ISvcLocator* svcLoc);
StatusCode initialize() override;
size_t getUniqueID(uint32_t evt_num, uint32_t run_num, std::string name) const override;
size_t getUniqueID(uint32_t evt_num, uint32_t run_num, const std::string& name) const override;
private:
Gaudi::Property<int64_t> m_seed{this, "Seed", {123456789}};
};

#endif
10 changes: 9 additions & 1 deletion k4Interface/include/k4Interface/IUniqueIDGenSvc.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,17 @@

#include <GaudiKernel/IInterface.h>

/** @class IUniqueIDGenSvc
*
* Interface to the UniqueIDGenSvc
*
* @author Placido Fernandez Declara
*/

struct GAUDI_API IUniqueIDGenSvc : extend_interfaces<IInterface> {
DeclareInterfaceID(IUniqueIDGenSvc, 2, 0);
virtual size_t getUniqueID(uint32_t evt_num, uint32_t run_num, std::string name) const = 0;
virtual size_t getUniqueID(
uint32_t evt_num, uint32_t run_num, const std::string& name) const = 0;
};

#endif
3 changes: 3 additions & 0 deletions test/k4FWCoreTest/options/TestUniqueIDGenSvc.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
from Gaudi.Configuration import *

from Configurables import UniqueIDGenSvc
UniqueIDGenSvc().Seed = 987

from Configurables import ApplicationMgr
ApplicationMgr().EvtSel = "NONE"
ApplicationMgr().EvtMax = 5
Expand Down
3 changes: 1 addition & 2 deletions test/k4FWCoreTest/src/components/TestUniqueIDGenSvc.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@
#define TEST_UNIQUEIDGENSVC_H

// GAUDI
#include "GaudiAlg/GaudiAlgorithm.h"

#include <GaudiAlg/GaudiAlgorithm.h>

#include "k4Interface/IUniqueIDGenSvc.h"

Expand Down

0 comments on commit 73edff3

Please sign in to comment.