34 #ifndef RGROUP_RANDOM_SAMPLE_ALLBBS_H 35 #define RGROUP_RANDOM_SAMPLE_ALLBBS_H 38 #include <boost/random.hpp> 39 #include <boost/random/uniform_int_distribution.hpp> 69 boost::uint64_t m_numPermutationsProcessed;
73 boost::minstd_rand m_rng;
74 std::vector<boost::random::uniform_int_distribution<> > m_distributions;
79 m_numPermutationsProcessed(0),
84 for (
size_t i = 0; i < m_permutation.size(); ++i) {
85 m_distributions.push_back(
86 boost::random::uniform_int_distribution<>(0, m_permutation[i] - 1));
92 m_distributions.clear();
93 m_permutation.resize(m_permutationSizes.size());
94 m_permutationSizes = m_permutationSizes;
97 *std::max_element(m_permutationSizes.begin(), m_permutationSizes.end());
98 for (
size_t i = 0; i < m_permutationSizes.size(); ++i) {
99 m_distributions.push_back(boost::random::uniform_int_distribution<>(
100 0, m_permutationSizes[i] - 1));
103 m_numPermutationsProcessed = 0;
106 virtual const char *
type()
const {
return "RandomSampleAllBBsStrategy"; }
110 if (m_offset >= m_maxoffset) {
111 for (
size_t i = 0; i < m_permutation.size(); ++i) {
112 m_permutation[i] = m_distributions[i](m_rng);
116 for (
size_t i = 0; i < m_permutation.size(); ++i) {
117 m_permutation[i] = (m_permutation[i] + 1) % m_permutationSizes[i];
121 ++m_numPermutationsProcessed;
123 return m_permutation;
127 return m_numPermutationsProcessed; }
129 virtual operator bool()
const {
return true; }
136 #ifdef RDK_USE_BOOST_SERIALIZATION 137 friend class boost::serialization::access;
139 template <
class Archive>
140 void save(Archive &ar,
const unsigned int )
const {
142 ar << boost::serialization::base_object<const EnumerationStrategyBase>(
144 ar << m_numPermutationsProcessed;
146 std::stringstream random;
148 std::string s = random.str();
155 template <
class Archive>
156 void load(Archive &ar,
const unsigned int ) {
158 ar >> boost::serialization::base_object<EnumerationStrategyBase>(*this);
159 ar >> m_numPermutationsProcessed;
162 std::stringstream random(s);
168 m_distributions.clear();
169 for (
size_t i = 0; i < m_permutationSizes.size(); ++i) {
170 m_distributions.push_back(boost::random::uniform_int_distribution<>(
171 0, m_permutationSizes[i] - 1));
175 template <
class Archive>
176 void serialize(Archive &ar,
const unsigned int file_version) {
177 boost::serialization::split_member(ar, *
this, file_version);
183 #ifdef RDK_USE_BOOST_SERIALIZATION RandomSampleAllBBsStrategy()
void initialize(const ChemicalReaction &reaction, const EnumerationTypes::BBS &building_blocks)
void initializeStrategy(const ChemicalReaction &, const EnumerationTypes::BBS &)
EnumerationStrategyBase * copy() const
copy the enumeration strategy complete with current state
This is a class for storing and applying general chemical reactions.
virtual boost::uint64_t getPermutationIdx() const
Returns how many permutations have been processed by this strategy.
std::vector< MOL_SPTR_VECT > BBS
virtual const char * type() const
virtual const EnumerationTypes::RGROUPS & next()
The current permutation {r1, r2, ...}.
std::vector< boost::uint64_t > RGROUPS
#define RDKIT_CHEMREACTIONS_EXPORT
This is a class for randomly enumerating reagents that ensures all reagents.