RDKit
Open-source cheminformatics and machine learning.
types.h
Go to the documentation of this file.
1 //
2 // Copyright (C) 2001-2006 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 #ifndef __RD_TYPES_H__
12 #define __RD_TYPES_H__
13 
14 #ifdef WIN32
15 #define _USE_MATH_DEFINES
16 #endif
17 
18 #include <cmath>
19 
20 #include <RDGeneral/Invariant.h>
21 #include "Dict.h"
22 
23 namespace detail {
24  // used in various places for computed properties
25  const std::string computedPropName="__computedProps";
26 }
27 
28 
29 #include <vector>
30 #include <deque>
31 #include <map>
32 #include <set>
33 #include <string>
34 #include <algorithm>
35 #include <numeric>
36 #include <list>
37 #include<limits>
38 
39 #include <cstring>
40 
41 #include <boost/any.hpp>
42 #include <boost/lexical_cast.hpp>
43 
44 
45 namespace RDKit {
46  namespace common_properties {
47  extern const std::string TWOD;
48  extern const std::string BalabanJ;
49  extern const std::string BalanbanJ;
50  extern const std::string Discrims;
51  extern const std::string DistanceMatrix_Paths;
52  extern const std::string MolFileComments;
53  extern const std::string MolFileInfo;
54  extern const std::string NullBond;
55  extern const std::string _2DConf;
56  extern const std::string _3DConf;
57  extern const std::string _AtomID;
58  extern const std::string _BondsPotentialStereo;
59  extern const std::string _CIPCode;
60  extern const std::string _CIPRank;
61  extern const std::string _ChiralityPossible;
62  extern const std::string _CrippenLogP;
63  extern const std::string _CrippenMR;
64  extern const std::string _MMFFSanitized;
65  extern const std::string _MolFileChiralFlag;
66  extern const std::string _MolFileRLabel;
67  extern const std::string _Name;
68  extern const std::string _NeedsQueryScan;
69  extern const std::string _QueryFormalCharge;
70  extern const std::string _QueryHCount;
71  extern const std::string _QueryIsotope;
72  extern const std::string _QueryMass;
73  extern const std::string _ReactionDegreeChanged;
74  extern const std::string _RingClosures;
75  extern const std::string _SLN_s;
76  extern const std::string _SmilesStart;
77  extern const std::string _StereochemDone;
78  extern const std::string _TraversalBondIndexOrder;
79  extern const std::string _TraversalRingClosureBond;
80  extern const std::string _TriposAtomType;
81  extern const std::string _Unfinished_SLN_;
82  extern const std::string _UnknownStereo;
83  extern const std::string _connectivityHKDeltas;
84  extern const std::string _connectivityNVals;
85  extern const std::string _crippenLogP;
86  extern const std::string _crippenLogPContribs;
87  extern const std::string _crippenMR;
88  extern const std::string _crippenMRContribs;
89  extern const std::string _doIsoSmiles;
90  extern const std::string _fragSMARTS;
91  extern const std::string _hasMassQuery;
92  extern const std::string _labuteASA;
93  extern const std::string _labuteAtomContribs;
94  extern const std::string _labuteAtomHContrib;
95  extern const std::string _protected;
96  extern const std::string _queryRootAtom;
97  extern const std::string _ringStereoAtoms;
98  extern const std::string _ringStereoWarning;
99  extern const std::string _ringStereochemCand;
100  extern const std::string _smilesAtomOutputOrder;
101  extern const std::string _starred;
102  extern const std::string _supplementalSmilesLabel;
103  extern const std::string _tpsa;
104  extern const std::string _tpsaAtomContribs;
105  extern const std::string _unspecifiedOrder;
106  extern const std::string _brokenChirality;
107  extern const std::string dummyLabel;
108  extern const std::string extraRings;
109  extern const std::string isImplicit;
110  extern const std::string maxAttachIdx;
111  extern const std::string molAtomMapNumber;
112  extern const std::string molFileAlias;
113  extern const std::string molFileValue;
114  extern const std::string molInversionFlag;
115  extern const std::string molParity;
116  extern const std::string molRxnComponent;
117  extern const std::string molRxnRole;
118  extern const std::string molTotValence;
119  extern const std::string numArom;
120  extern const std::string origNoImplicit;
121  extern const std::string ringMembership;
122  extern const std::string smilesSymbol;
123  } // end common_properties
124 #ifndef WIN32
125  typedef long long int LONGINT;
126 #else
127  typedef __int64 LONGINT;
128 #endif
129 #ifdef max
130 #undef max // FUCK I hate this nonsense
131 #endif
132 #ifdef min
133 #undef min // FUCK I hate this nonsense
134 #endif
135 
136  const double MAX_DOUBLE = std::numeric_limits<double>::max();
137  const double EPS_DOUBLE = std::numeric_limits<double>::epsilon();
138  const double SMALL_DOUBLE = 1.0e-8;
139  const double MAX_INT = static_cast<double>(std::numeric_limits<int>::max());
140  const double MAX_LONGINT = static_cast<double>(std::numeric_limits<LONGINT>::max());
141 
142  typedef unsigned int UINT;
143  typedef unsigned short USHORT;
144  typedef unsigned char UCHAR;
145 
146  typedef std::vector<int> INT_VECT;
147  typedef INT_VECT::iterator INT_VECT_I;
148  typedef INT_VECT::const_iterator INT_VECT_CI;
149  typedef INT_VECT::reverse_iterator INT_VECT_RI;
150  typedef INT_VECT::const_reverse_iterator INT_VECT_CRI;
151 
152  typedef std::list<int> INT_LIST;
153  typedef INT_LIST::iterator INT_LIST_I;
154  typedef INT_LIST::const_iterator INT_LIST_CI;
155 
156  typedef std::list<INT_VECT> LIST_INT_VECT;
157  typedef LIST_INT_VECT::iterator LIST_INT_VECT_I;
158  typedef LIST_INT_VECT::const_iterator LIST_INT_VECT_CI;
159 
160  typedef std::vector<INT_VECT> VECT_INT_VECT;
161  typedef VECT_INT_VECT::iterator VECT_INT_VECT_I;
162  typedef VECT_INT_VECT::const_iterator VECT_INT_VECT_CI;
163 
164  typedef std::vector<UINT>::const_iterator UINT_VECT_CI;
165  typedef std::vector<UINT> UINT_VECT;
166 
167  typedef std::vector<std::string>::const_iterator STR_VECT_CI;
168  typedef std::vector<std::string>::iterator STR_VECT_I;
169  typedef std::vector<std::string> STR_VECT;
170 
171 
172  typedef std::vector<double> DOUBLE_VECT;
173  typedef DOUBLE_VECT::iterator DOUBLE_VECT_I;
174  typedef DOUBLE_VECT::const_iterator DOUBLE_VECT_CI;
175  typedef std::vector<DOUBLE_VECT> VECT_DOUBLE_VECT;
176  typedef VECT_DOUBLE_VECT::iterator VECT_DOUBLE_VECT_I;
177  typedef VECT_DOUBLE_VECT::const_iterator VECT_DOUBLE_VECT_CI;
178 
179  typedef std::map<std::string, UINT> STR_UINT_MAP;
180  typedef std::map<std::string, UINT>::const_iterator STR_UINT_MAP_CI;
181 
182  typedef std::map<int, INT_VECT> INT_INT_VECT_MAP;
183  typedef INT_INT_VECT_MAP::const_iterator INT_INT_VECT_MAP_CI;
184 
185  typedef std::map<int, int> INT_MAP_INT;
186  typedef INT_MAP_INT::iterator INT_MAP_INT_I;
187  typedef INT_MAP_INT::const_iterator INT_MAP_INT_CI;
188 
189  typedef std::deque<int> INT_DEQUE;
190  typedef INT_DEQUE::iterator INT_DEQUE_I;
191  typedef INT_DEQUE::const_iterator INT_DEQUE_CI;
192 
193  typedef std::map<int, INT_DEQUE> INT_INT_DEQ_MAP;
194  typedef INT_INT_DEQ_MAP::const_iterator INT_INT_DEQ_MAP_CI;
195 
196  typedef std::set<int> INT_SET;
197  typedef INT_SET::iterator INT_SET_I;
198  typedef INT_SET::const_iterator INT_SET_CI;
199 
200  //! functor to compare two doubles with a tolerance
201  struct ltDouble {
202  public:
203  ltDouble() : _tol(1.0e-8) {};
204  bool operator() (double d1, double d2) const {
205  if (fabs(d1 - d2) < _tol) {
206  return false;
207  }
208  else {
209  return (d1 < d2);
210  }
211  }
212  private:
213  double _tol;
214  };
215 
216  //! std::map from double to integer.
217  typedef std::map<double, int, ltDouble> DOUBLE_INT_MAP;
218 
219  //! functor for returning the larger of two values
220  template <typename T>
221  struct larger_of {
222  T operator()(T arg1,T arg2) { return arg1>arg2 ? arg1 : arg2; };
223  };
224 
225 
226  //! functor for comparing two strings
228  bool operator()(const char* s1, const char* s2) const
229  {
230  //std::cout << s1 << " " << s2 << " " << strcmp(s1, s2) << "\n";
231 
232  return strcmp(s1, s2) < 0;
233  };
234  };
235 
236  //! \brief calculate the union of two INT_VECTs and put the results in a
237  //! third vector
238  void Union(const INT_VECT &r1, const INT_VECT &r2, INT_VECT &res);
239 
240  //! \brief calculate the intersection of two INT_VECTs and put the results in a
241  //! third vector
242  void Intersect(const INT_VECT &r1, const INT_VECT &r2, INT_VECT &res);
243 
244  //! calculating the union of the INT_VECT's in a VECT_INT_VECT
245  /*!
246  \param rings the INT_VECT's to consider
247  \param res used to return results
248  \param exclude any values in this optional INT_VECT will be excluded
249  from the union.
250  */
251  void Union(const VECT_INT_VECT &rings, INT_VECT &res, const INT_VECT *exclude=NULL);
252 
253  //! given a current combination of numbers change it to the next possible combination
254  /*!
255  \param comb the <b>sorted</b> vector to consider
256  \param tot the maximum number possible in the vector
257 
258  \return -1 on failure, the index of the last number changed on success.
259  Example:
260  for all combinations 3 of numbers between 0 and tot=5
261  given (0,1,2) the function wil return (0,1,3) etc.
262 
263 
264  */
265  int nextCombination(INT_VECT &comb, int tot);
266 
267 
268  //! rounds a value to the closest int
269  double round(double v);
270 
271 }; // end of namespace
272 
273 
274 
275 #endif
const std::string _StereochemDone
const std::string _protected
std::list< int > INT_LIST
Definition: types.h:152
unsigned short USHORT
Definition: types.h:143
const std::string isImplicit
const std::string origNoImplicit
VECT_DOUBLE_VECT::iterator VECT_DOUBLE_VECT_I
Definition: types.h:176
DOUBLE_VECT::const_iterator DOUBLE_VECT_CI
Definition: types.h:174
const std::string _labuteAtomHContrib
const std::string _connectivityNVals
VECT_INT_VECT::iterator VECT_INT_VECT_I
Definition: types.h:161
const std::string _3DConf
const std::string _RingClosures
functor to compare two doubles with a tolerance
Definition: types.h:201
const double MAX_INT
Definition: types.h:139
double round(double v)
rounds a value to the closest int
const std::string _labuteASA
const std::string _crippenLogP
const std::string _unspecifiedOrder
std::map< std::string, UINT >::const_iterator STR_UINT_MAP_CI
Definition: types.h:180
const std::string BalabanJ
std::vector< UINT >::const_iterator UINT_VECT_CI
Definition: types.h:164
const std::string _QueryMass
const std::string MolFileInfo
void Union(const VECT_INT_VECT &rings, INT_VECT &res, const INT_VECT *exclude=NULL)
calculating the union of the INT_VECT&#39;s in a VECT_INT_VECT
std::vector< double > DOUBLE_VECT
Definition: types.h:172
const std::string _SLN_s
const std::string molTotValence
const std::string _UnknownStereo
const std::string TWOD
INT_MAP_INT::const_iterator INT_MAP_INT_CI
Definition: types.h:187
const std::string _ReactionDegreeChanged
const std::string _ringStereoWarning
T operator()(T arg1, T arg2)
Definition: types.h:222
INT_SET::iterator INT_SET_I
Definition: types.h:197
const double MAX_DOUBLE
Definition: types.h:136
const std::string _Name
const std::string molAtomMapNumber
unsigned char UCHAR
Definition: types.h:144
const std::string molParity
INT_DEQUE::const_iterator INT_DEQUE_CI
Definition: types.h:191
const std::string NullBond
INT_LIST::iterator INT_LIST_I
Definition: types.h:153
std::vector< DOUBLE_VECT > VECT_DOUBLE_VECT
Definition: types.h:175
VECT_DOUBLE_VECT::const_iterator VECT_DOUBLE_VECT_CI
Definition: types.h:177
DOUBLE_VECT::iterator DOUBLE_VECT_I
Definition: types.h:173
INT_INT_DEQ_MAP::const_iterator INT_INT_DEQ_MAP_CI
Definition: types.h:194
const std::string MolFileComments
const std::string _2DConf
const std::string extraRings
Defines the Dict class.
const std::string _Unfinished_SLN_
const std::string _supplementalSmilesLabel
const std::string _crippenMRContribs
const std::string maxAttachIdx
INT_SET::const_iterator INT_SET_CI
Definition: types.h:198
const std::string _smilesAtomOutputOrder
functor for returning the larger of two values
Definition: types.h:221
const std::string _fragSMARTS
INT_MAP_INT::iterator INT_MAP_INT_I
Definition: types.h:186
const std::string _CIPRank
const std::string dummyLabel
const std::string _labuteAtomContribs
INT_VECT::const_reverse_iterator INT_VECT_CRI
Definition: types.h:150
std::vector< INT_VECT > VECT_INT_VECT
Definition: types.h:160
const std::string _tpsa
long long int LONGINT
Definition: types.h:125
Definition: types.h:23
const std::string _TraversalBondIndexOrder
functor for comparing two strings
Definition: types.h:227
const std::string _queryRootAtom
std::map< std::string, UINT > STR_UINT_MAP
Definition: types.h:179
const std::string BalanbanJ
const std::string _starred
std::vector< int > INT_VECT
Definition: types.h:146
const std::string _MMFFSanitized
std::set< int > INT_SET
Definition: types.h:196
INT_VECT::reverse_iterator INT_VECT_RI
Definition: types.h:149
std::vector< std::string >::const_iterator STR_VECT_CI
Definition: types.h:167
const std::string _QueryIsotope
bool operator()(const char *s1, const char *s2) const
Definition: types.h:228
const std::string molRxnRole
const std::string _CIPCode
Includes a bunch of functionality for handling Atom and Bond queries.
Definition: Atom.h:28
unsigned int UINT
Definition: types.h:142
const std::string molRxnComponent
INT_VECT::iterator INT_VECT_I
Definition: types.h:147
LIST_INT_VECT::iterator LIST_INT_VECT_I
Definition: types.h:157
const std::string molInversionFlag
INT_VECT::const_iterator INT_VECT_CI
Definition: types.h:148
const std::string smilesSymbol
const std::string computedPropName
Definition: types.h:25
VECT_INT_VECT::const_iterator VECT_INT_VECT_CI
Definition: types.h:162
const std::string _QueryHCount
const std::string _NeedsQueryScan
std::map< double, int, ltDouble > DOUBLE_INT_MAP
std::map from double to integer.
Definition: types.h:217
const std::string numArom
const std::string _ringStereoAtoms
INT_DEQUE::iterator INT_DEQUE_I
Definition: types.h:190
std::map< int, int > INT_MAP_INT
Definition: types.h:185
const std::string _BondsPotentialStereo
const std::string ringMembership
const std::string _MolFileChiralFlag
std::list< INT_VECT > LIST_INT_VECT
Definition: types.h:156
const std::string _AtomID
INT_LIST::const_iterator INT_LIST_CI
Definition: types.h:154
const std::string _QueryFormalCharge
void Intersect(const INT_VECT &r1, const INT_VECT &r2, INT_VECT &res)
calculate the intersection of two INT_VECTs and put the results in a third vector ...
const std::string _crippenMR
const std::string _MolFileRLabel
const std::string molFileValue
const std::string Discrims
std::map< int, INT_DEQUE > INT_INT_DEQ_MAP
Definition: types.h:193
std::map< int, INT_VECT > INT_INT_VECT_MAP
Definition: types.h:182
const std::string _hasMassQuery
std::vector< UINT > UINT_VECT
Definition: types.h:165
const double SMALL_DOUBLE
Definition: types.h:138
const std::string DistanceMatrix_Paths
INT_INT_VECT_MAP::const_iterator INT_INT_VECT_MAP_CI
Definition: types.h:183
std::deque< int > INT_DEQUE
Definition: types.h:189
const std::string _crippenLogPContribs
const double EPS_DOUBLE
Definition: types.h:137
const std::string _TraversalRingClosureBond
const std::string _ChiralityPossible
std::vector< std::string >::iterator STR_VECT_I
Definition: types.h:168
const std::string _ringStereochemCand
const double MAX_LONGINT
Definition: types.h:140
const std::string _TriposAtomType
LIST_INT_VECT::const_iterator LIST_INT_VECT_CI
Definition: types.h:158
const std::string _connectivityHKDeltas
const std::string _CrippenMR
const std::string _tpsaAtomContribs
int nextCombination(INT_VECT &comb, int tot)
given a current combination of numbers change it to the next possible combination ...
const std::string _CrippenLogP
const std::string _brokenChirality
std::vector< std::string > STR_VECT
Definition: Dict.h:26
const std::string molFileAlias
const std::string _SmilesStart
const std::string _doIsoSmiles