RDKit
Open-source cheminformatics and machine learning.
Loading...
Searching...
No Matches
utils.h
Go to the documentation of this file.
1//
2// Copyright (C) 2002-2020 Greg Landrum and Rational Discovery LLC
3//
4// @@ All Rights Reserved @@
5// This file is part of the RDKit.
6// The contents are covered by the terms of the BSD license
7// which is included in the file license.txt, found at the root
8// of the RDKit source tree.
9//
10//
11#include <RDGeneral/export.h>
12#ifndef RD_UTILS_H
13#define RD_UTILS_H
14
15#include "types.h"
16#include <RDGeneral/Invariant.h>
18#include <boost/random.hpp>
20
21namespace RDKit {
22const int NUM_PRIMES_AVAIL =
23 1000; //!< the number of primes available and stored
25
26const int FILE_MAXLINE =
27 256; //!< an assumed maximum length for lines read from files
28
29//! \brief compute the product of the set of primes corresponding to the
30//! values in an INT_VECT
32
33//! floating point comparison with a tolerance
34RDKIT_RDGENERAL_EXPORT bool feq(double v1, double v2, double tol = 1e-4);
35
36typedef boost::minstd_rand rng_type;
37typedef boost::uniform_int<> uniform_int;
38typedef boost::uniform_real<> uniform_double;
39typedef boost::variate_generator<rng_type &, uniform_int> int_source_type;
40typedef boost::variate_generator<rng_type &, uniform_double> double_source_type;
41
42//! Optionally seed and return a reference to the global (Boost) random
43/// generator
45
46//! Return a random double value between 0.0 and 1.0
47//! Optionally seed the random number generator
49
50//! return a reference to the global (Boost) random source
52
53template <class T>
54unsigned int countSwapsToInterconvert(const T &ref, T probe) {
55 PRECONDITION(ref.size() == probe.size(), "size mismatch");
56 typename T::const_iterator refIt = ref.begin();
57 typename T::iterator probeIt = probe.begin();
58 typename T::iterator probeIt2;
59
60 unsigned int nSwaps = 0;
61 while (refIt != ref.end()) {
62 if ((*probeIt) != (*refIt)) {
63 bool foundIt = false;
65 while ((*probeIt2) != (*refIt) && probeIt2 != probe.end()) {
66 ++probeIt2;
67 }
68 if (probeIt2 != probe.end()) {
69 foundIt = true;
70 }
71 CHECK_INVARIANT(foundIt, "could not find probe element");
72
73 std::swap(*probeIt, *probeIt2);
74 nSwaps++;
75 }
76 ++probeIt;
77 ++refIt;
78 }
79 return nSwaps;
80}
81
82RDKIT_RDGENERAL_EXPORT std::string augmentTagName(const std::string &tag);
83} // namespace RDKit
84
85// contribution from dkoes
86template <unsigned n>
87inline double int_pow(double x) {
88 double half = int_pow<n / 2>(x);
89 if (n % 2 == 0) { // even
90 return half * half;
91 } else {
92 return half * half * x;
93 }
94}
95
96template <>
97inline double int_pow<0>(double) {
98 return 1;
99}
100
101template <>
102inline double int_pow<1>(double x) {
103 return x; // this does a series of muls
104}
105
106#endif
#define CHECK_INVARIANT(expr, mess)
Definition Invariant.h:101
#define PRECONDITION(expr, mess)
Definition Invariant.h:109
#define RDKIT_RDGENERAL_EXPORT
Definition export.h:385
Std stuff.
std::vector< int > INT_VECT
Definition types.h:284
boost::uniform_int uniform_int
Definition utils.h:37
RDKIT_RDGENERAL_EXPORT bool feq(double v1, double v2, double tol=1e-4)
floating point comparison with a tolerance
boost::minstd_rand rng_type
Definition utils.h:36
boost::variate_generator< rng_type &, uniform_double > double_source_type
Definition utils.h:40
RDKIT_RDGENERAL_EXPORT double computeIntVectPrimesProduct(const INT_VECT &ring)
compute the product of the set of primes corresponding to the values in an INT_VECT
bool rdvalue_is(const RDValue_cast_t)
RDKIT_RDGENERAL_EXPORT double_source_type & getDoubleRandomSource()
return a reference to the global (Boost) random source
boost::variate_generator< rng_type &, uniform_int > int_source_type
Definition utils.h:39
RDKIT_RDGENERAL_EXPORT std::string augmentTagName(const std::string &tag)
int firstThousandPrimes[NUM_PRIMES_AVAIL]
Definition utils.h:24
const int NUM_PRIMES_AVAIL
the number of primes available and stored
Definition primes.h:15
RDKIT_RDGENERAL_EXPORT rng_type & getRandomGenerator(int seed=-1)
unsigned int countSwapsToInterconvert(const T &ref, T probe)
Definition utils.h:54
boost::uniform_real uniform_double
Definition utils.h:38
const int FILE_MAXLINE
an assumed maximum length for lines read from files
Definition utils.h:26
RDKIT_RDGENERAL_EXPORT double getRandomVal(int seed=-1)
double int_pow(double x)
Definition utils.h:87
double int_pow< 0 >(double)
Definition utils.h:97
double int_pow< 1 >(double x)
Definition utils.h:102