RDKit
Open-source cheminformatics and machine learning.
Toggle main menu visibility
Loading...
Searching...
No Matches
RandomSample.h
Go to the documentation of this file.
1
//
2
// Copyright (c) 2015, Novartis Institutes for BioMedical Research Inc.
3
// All rights reserved.
4
//
5
// Redistribution and use in source and binary forms, with or without
6
// modification, are permitted provided that the following conditions are
7
// met:
8
//
9
// * Redistributions of source code must retain the above copyright
10
// notice, this list of conditions and the following disclaimer.
11
// * Redistributions in binary form must reproduce the above
12
// copyright notice, this list of conditions and the following
13
// disclaimer in the documentation and/or other materials provided
14
// with the distribution.
15
// * Neither the name of Novartis Institutes for BioMedical Research Inc.
16
// nor the names of its contributors may be used to endorse or promote
17
// products derived from this software without specific prior written
18
// permission.
19
//
20
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
//
32
33
#include <
RDGeneral/export.h
>
34
#ifndef RGROUP_RANDOM_SAMPLE_H
35
#define RGROUP_RANDOM_SAMPLE_H
36
37
#include "
EnumerationStrategyBase.h
"
38
#include <boost/random.hpp>
39
#include <boost/random/uniform_int_distribution.hpp>
40
#include <sstream>
41
42
namespace
RDKit
{
43
44
//! This is a class for fully randomly sampling reagents.
45
/// Note that this enumerator never halts.
46
/*!
47
basic usage:
48
49
\verbatim
50
std::vector<MOL_SPTR_VECT> bbs;
51
bbs.push_back( bbs_for_reactants_1 );
52
bbs.push_back( bbs_for_reactants_2 );
53
54
RandomSampleStrategy rgroups;
55
rgroups.initialize(rxn, bbs);
56
for(size_t i=0; i<num_samples && rgroups; ++i) {
57
MOL_SPTR_VECT rvect = getReactantsFromRGroups(bbs, rgroups.next());
58
std::vector<MOL_SPTR_VECT> lprops = rxn.RunReactants(rvect);
59
...
60
}
61
\endverbatim
62
63
See EnumerationStrategyBase for more details and usage.
64
*/
65
class
RDKIT_CHEMREACTIONS_EXPORT
RandomSampleStrategy
66
:
public
EnumerationStrategyBase
{
67
boost::uint64_t m_numPermutationsProcessed{};
68
boost::minstd_rand m_rng;
69
std::vector<boost::random::uniform_int_distribution<>> m_distributions;
70
71
public
:
72
RandomSampleStrategy
()
73
:
EnumerationStrategyBase
(),
74
75
m_rng(),
76
m_distributions() {
77
for
(
size_t
i = 0; i <
m_permutation
.size(); ++i) {
78
m_distributions.emplace_back(0,
m_permutation
[i] - 1);
79
}
80
}
81
82
using
EnumerationStrategyBase::initialize
;
83
84
void
initializeStrategy
(
const
ChemicalReaction
&,
85
const
EnumerationTypes::BBS
&)
override
{
86
m_distributions.clear();
87
for
(
size_t
i = 0; i <
m_permutationSizes
.size(); ++i) {
88
m_distributions.emplace_back(0,
m_permutationSizes
[i] - 1);
89
}
90
91
m_numPermutationsProcessed = 0;
92
}
93
94
const
char
*
type
()
const override
{
return
"RandomSampleStrategy"
; }
95
96
//! The current permutation {r1, r2, ...}
97
const
EnumerationTypes::RGROUPS
&
next
()
override
{
98
for
(
size_t
i = 0; i <
m_permutation
.size(); ++i) {
99
m_permutation
[i] = m_distributions[i](m_rng);
100
}
101
102
++m_numPermutationsProcessed;
103
104
return
m_permutation
;
105
}
106
107
boost::uint64_t
getPermutationIdx
()
const override
{
108
return
m_numPermutationsProcessed;
109
}
110
111
operator
bool()
const override
{
return
true
; }
112
113
EnumerationStrategyBase
*
copy
()
const override
{
114
return
new
RandomSampleStrategy
(*
this
);
115
}
116
117
private
:
118
#ifdef RDK_USE_BOOST_SERIALIZATION
119
friend
class
boost::serialization::access;
120
121
template
<
class
Archive>
122
void
save(Archive &ar,
const
unsigned
int
/*version*/
)
const
{
123
// invoke serialization of the base class
124
ar << boost::serialization::base_object<const EnumerationStrategyBase>(
125
*
this
);
126
ar << m_numPermutationsProcessed;
127
128
std::stringstream random;
129
random << m_rng;
130
std::string s = random.str();
131
ar << s;
132
}
133
134
template
<
class
Archive>
135
void
load(Archive &ar,
const
unsigned
int
/*version*/
) {
136
// invoke serialization of the base class
137
ar >> boost::serialization::base_object<EnumerationStrategyBase>(*
this
);
138
ar >> m_numPermutationsProcessed;
139
std::string s;
140
ar >> s;
141
std::stringstream random(s);
142
random >> m_rng;
143
144
// reset the uniform distributions
145
m_distributions.clear();
146
for
(
size_t
i = 0; i < m_permutationSizes.size(); ++i) {
147
m_distributions.emplace_back(0, m_permutationSizes[i] - 1);
148
}
149
}
150
151
template
<
class
Archive>
152
void
serialize
(Archive &ar,
const
unsigned
int
file_version) {
153
boost::serialization::split_member(ar, *
this
, file_version);
154
}
155
#endif
156
};
157
}
// namespace RDKit
158
159
#ifdef RDK_USE_BOOST_SERIALIZATION
160
BOOST_CLASS_VERSION(
RDKit::RandomSampleStrategy
, 1)
161
#endif
162
163
#endif
EnumerationStrategyBase.h
RDKit::ChemicalReaction
This is a class for storing and applying general chemical reactions.
Definition
Reaction.h:122
RDKit::EnumerationStrategyBase::initialize
void initialize(const ChemicalReaction &reaction, const EnumerationTypes::BBS &building_blocks)
Definition
EnumerationStrategyBase.h:145
RDKit::EnumerationStrategyBase::m_permutation
EnumerationTypes::RGROUPS m_permutation
Definition
EnumerationStrategyBase.h:125
RDKit::EnumerationStrategyBase::m_permutationSizes
EnumerationTypes::RGROUPS m_permutationSizes
Definition
EnumerationStrategyBase.h:127
RDKit::EnumerationStrategyBase::EnumerationStrategyBase
EnumerationStrategyBase()
Definition
EnumerationStrategyBase.h:134
RDKit::RandomSampleStrategy
Definition
RandomSample.h:66
RDKit::RandomSampleStrategy::copy
EnumerationStrategyBase * copy() const override
copy the enumeration strategy complete with current state
Definition
RandomSample.h:113
RDKit::RandomSampleStrategy::next
const EnumerationTypes::RGROUPS & next() override
The current permutation {r1, r2, ...}.
Definition
RandomSample.h:97
RDKit::RandomSampleStrategy::getPermutationIdx
boost::uint64_t getPermutationIdx() const override
Returns how many permutations have been processed by this strategy.
Definition
RandomSample.h:107
RDKit::RandomSampleStrategy::RandomSampleStrategy
RandomSampleStrategy()
Definition
RandomSample.h:72
RDKit::RandomSampleStrategy::type
const char * type() const override
Definition
RandomSample.h:94
RDKit::RandomSampleStrategy::initializeStrategy
void initializeStrategy(const ChemicalReaction &, const EnumerationTypes::BBS &) override
Definition
RandomSample.h:84
export.h
RDKIT_CHEMREACTIONS_EXPORT
#define RDKIT_CHEMREACTIONS_EXPORT
Definition
export.h:71
RDKit::EnumerationTypes::RGROUPS
std::vector< boost::uint64_t > RGROUPS
Definition
EnumerateTypes.h:56
RDKit::EnumerationTypes::BBS
std::vector< MOL_SPTR_VECT > BBS
Definition
EnumerateTypes.h:42
RDKit
Std stuff.
Definition
Abbreviations.h:19
boost::serialization::serialize
void serialize(Archive &ar, dynamic_bitset< Block, Allocator > &bs, const unsigned int)
Definition
ShapeInput.h:43
GraphMol
ChemReactions
Enumerate
RandomSample.h
Generated on
for RDKit by
1.17.0