RDKit
Open-source cheminformatics and machine learning.
Toggle main menu visibility
Loading...
Searching...
No Matches
SmilesParse.h
Go to the documentation of this file.
1
//
2
// Copyright (C) 2001-2021 Greg Landrum and other RDKit contributors
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
#include <
RDGeneral/export.h
>
11
#ifndef RD_SMILESPARSE_H
12
#define RD_SMILESPARSE_H
13
14
#include <
GraphMol/SanitException.h
>
15
#include <string>
16
#include <exception>
17
#include <map>
18
#include <memory>
19
20
namespace
RDKit
{
21
class
RWMol
;
22
class
Atom
;
23
class
Bond
;
24
25
namespace
SmilesParse
{
26
class
RDKIT_SMILESPARSE_EXPORT
SmilesParseException
:
public
std::exception {
27
public
:
28
SmilesParseException
(
const
char
*msg) : _msg(msg) {}
29
SmilesParseException
(
const
std::string msg) : _msg(msg) {}
30
const
char
*
what
() const noexcept
override
{
return
_msg.c_str(); }
31
~SmilesParseException
() noexcept override = default;
32
33
private:
34
std::
string
_msg;
35
};
36
37
}
// namespace SmilesParse
38
39
namespace
v2
{
40
namespace
SmilesParse
{
41
using
RDKit::SmilesParse::SmilesParseException
;
42
43
struct
RDKIT_SMILESPARSE_EXPORT
SmilesParserParams
{
44
bool
sanitize
=
true
;
/**< sanitize the molecule after building it */
45
bool
allowCXSMILES
=
true
;
/**< recognize and parse CXSMILES*/
46
bool
strictCXSMILES
=
47
true
;
/**< throw an exception if the CXSMILES parsing fails */
48
bool
parseName
=
true
;
/**< parse (and set) the molecule name as well */
49
bool
removeHs
=
true
;
/**< remove Hs after constructing the molecule */
50
bool
skipCleanup
=
false
;
/**< skip the final cleanup stage */
51
bool
debugParse
=
false
;
/**< enable debugging in the SMILES parser*/
52
std::map<std::string, std::string>
53
replacements
;
/**< allows SMILES "macros" */
54
};
55
56
struct
RDKIT_SMILESPARSE_EXPORT
SmartsParserParams
{
57
bool
allowCXSMILES
=
true
;
/**< recognize and parse CXSMILES extensions */
58
bool
strictCXSMILES
=
59
true
;
/**< throw an exception if the CXSMILES parsing fails */
60
bool
parseName
=
true
;
/**< parse (and set) the molecule name as well */
61
bool
mergeHs
=
62
false
;
/**< toggles merging H atoms in the SMARTS into neighboring atoms*/
63
bool
skipCleanup
=
false
;
/**< skip the final cleanup stage */
64
bool
debugParse
=
false
;
/**< enable debugging in the SMARTS parser*/
65
std::map<std::string, std::string>
66
replacements
;
/**< allows SMARTS "macros" */
67
};
68
69
RDKIT_SMILESPARSE_EXPORT
std::unique_ptr<RDKit::RWMol>
MolFromSmiles
(
70
const
std::string &smi,
71
const
SmilesParserParams
¶ms =
SmilesParserParams
());
72
RDKIT_SMILESPARSE_EXPORT
std::unique_ptr<RDKit::RWMol>
MolFromSmarts
(
73
const
std::string &sma,
74
const
SmartsParserParams
¶ms =
SmartsParserParams
());
75
76
RDKIT_SMILESPARSE_EXPORT
std::unique_ptr<RDKit::Atom>
AtomFromSmiles
(
77
const
std::string &smi);
78
RDKIT_SMILESPARSE_EXPORT
std::unique_ptr<RDKit::Bond>
BondFromSmiles
(
79
const
std::string &smi);
80
81
RDKIT_SMILESPARSE_EXPORT
std::unique_ptr<RDKit::Atom>
AtomFromSmarts
(
82
const
std::string &sma);
83
RDKIT_SMILESPARSE_EXPORT
std::unique_ptr<RDKit::Bond>
BondFromSmarts
(
84
const
std::string &sma);
85
86
}
// namespace SmilesParse
87
}
// namespace v2
88
89
inline
namespace
v1
{
90
using
RDKit::SmilesParse::SmilesParseException
;
91
92
struct
RDKIT_SMILESPARSE_EXPORT
SmilesParserParams
{
93
int
debugParse
= 0;
/**< enable debugging in the SMILES parser*/
94
bool
sanitize
=
true
;
/**< sanitize the molecule after building it */
95
std::map<std::string, std::string> *
replacements
=
96
nullptr
;
/**< allows SMILES "macros" */
97
bool
allowCXSMILES
=
true
;
/**< recognize and parse CXSMILES*/
98
bool
strictCXSMILES
=
99
true
;
/**< throw an exception if the CXSMILES parsing fails */
100
bool
parseName
=
true
;
/**< parse (and set) the molecule name as well */
101
bool
removeHs
=
true
;
/**< remove Hs after constructing the molecule */
102
bool
skipCleanup
=
false
;
/**< skip the final cleanup stage */
103
};
104
105
struct
RDKIT_SMILESPARSE_EXPORT
SmartsParserParams
{
106
int
debugParse
= 0;
/**< enable debugging in the SMARTS parser*/
107
std::map<std::string, std::string> *
replacements
=
108
nullptr
;
/**< allows SMARTS "macros" */
109
bool
allowCXSMILES
=
true
;
/**< recognize and parse CXSMILES extensions */
110
bool
strictCXSMILES
=
111
true
;
/**< throw an exception if the CXSMILES parsing fails */
112
bool
parseName
=
true
;
/**< parse (and set) the molecule name as well */
113
bool
mergeHs
=
114
false
;
/**< toggles merging H atoms in the SMARTS into neighboring atoms*/
115
bool
skipCleanup
=
false
;
/**< skip the final cleanup stage */
116
};
117
118
inline
RDKit::RWMol
*
SmilesToMol
(
const
std::string &smi,
119
const
SmilesParserParams
&ps) {
120
RDKit::v2::SmilesParse::SmilesParserParams
v2ps;
121
v2ps.
debugParse
= ps.
debugParse
;
122
v2ps.
sanitize
= ps.
sanitize
;
123
124
if
(ps.
replacements
) {
125
v2ps.
replacements
= *ps.
replacements
;
126
}
127
v2ps.
allowCXSMILES
= ps.
allowCXSMILES
;
128
v2ps.
strictCXSMILES
= ps.
strictCXSMILES
;
129
v2ps.
parseName
= ps.
parseName
;
130
v2ps.
removeHs
= ps.
removeHs
;
131
v2ps.
skipCleanup
= ps.
skipCleanup
;
132
return
RDKit::v2::SmilesParse::MolFromSmiles
(smi, v2ps).release();
133
}
134
135
inline
Atom
*
SmilesToAtom
(
const
std::string &smi) {
136
auto
res =
RDKit::v2::SmilesParse::AtomFromSmiles
(smi).release();
137
return
res;
138
}
139
140
inline
Bond
*
SmilesToBond
(
const
std::string &smi) {
141
return
RDKit::v2::SmilesParse::BondFromSmiles
(smi).release();
142
}
143
144
//! Construct a molecule from a SMILES string
145
/*!
146
\param smi the SMILES to convert
147
\param debugParse toggles verbose debugging information from the parser
148
\param sanitize toggles H removal and sanitization of the molecule
149
\param replacements a string->string map of replacement strings. See below
150
for more information about replacements.
151
152
\return a pointer to the new molecule; the caller is responsible for free'ing
153
this.
154
155
The optional replacements map can be used to do string substitution of
156
abbreviations
157
in the input SMILES. The set of substitutions is repeatedly looped through
158
until
159
the string no longer changes. It is the responsibility of the caller to make
160
sure
161
that substitutions results in legal and sensible SMILES.
162
163
Examples of substitutions:
164
\code
165
CC{Q}C with {"{Q}":"OCCO"} -> CCOCCOC
166
C{A}C{Q}C with {"{Q}":"OCCO", "{A}":"C1(CC1)"} -> CC1(CC1)COCCOC
167
C{A}C{Q}C with {"{Q}":"{X}CC{X}", "{A}":"C1CC1", "{X}":"N"} -> CC1CC1CNCCNC
168
\endcode
169
170
*/
171
inline
RWMol
*
SmilesToMol
(
172
const
std::string &smi,
int
debugParse = 0,
bool
sanitize =
true
,
173
std::map<std::string, std::string> *replacements =
nullptr
) {
174
RDKit::v2::SmilesParse::SmilesParserParams
params;
175
params.
debugParse
= debugParse;
176
if
(replacements) {
177
params.
replacements
= *replacements;
178
}
179
if
(sanitize) {
180
params.
sanitize
=
true
;
181
params.
removeHs
=
true
;
182
}
else
{
183
params.
sanitize
=
false
;
184
params.
removeHs
=
false
;
185
}
186
return
RDKit::v2::SmilesParse::MolFromSmiles
(smi, params).release();
187
};
188
189
inline
RWMol
*
SmartsToMol
(
const
std::string &sma,
190
const
SmartsParserParams
&ps) {
191
RDKit::v2::SmilesParse::SmartsParserParams
v2ps;
192
v2ps.
debugParse
= ps.
debugParse
;
193
if
(ps.
replacements
) {
194
v2ps.
replacements
= *ps.
replacements
;
195
}
196
v2ps.
allowCXSMILES
= ps.
allowCXSMILES
;
197
v2ps.
strictCXSMILES
= ps.
strictCXSMILES
;
198
v2ps.
parseName
= ps.
parseName
;
199
v2ps.
mergeHs
= ps.
mergeHs
;
200
v2ps.
skipCleanup
= ps.
skipCleanup
;
201
202
return
RDKit::v2::SmilesParse::MolFromSmarts
(sma, v2ps).release();
203
}
204
205
//! Construct a molecule from a SMARTS string
206
/*!
207
\param sma the SMARTS to convert
208
\param debugParse toggles verbose debugging information from the parser
209
\param mergeHs toggles merging H atoms in the SMARTS into neighboring
210
atoms
211
\param replacements a string->string map of replacement strings.
212
\see SmilesToMol for more information about replacements
213
214
\return a pointer to the new molecule; the caller is responsible for free'ing
215
this.
216
*/
217
inline
RWMol
*
SmartsToMol
(
218
const
std::string &sma,
int
debugParse = 0,
bool
mergeHs =
false
,
219
std::map<std::string, std::string> *replacements =
nullptr
) {
220
RDKit::v2::SmilesParse::SmartsParserParams
ps;
221
ps.
debugParse
= debugParse;
222
ps.
mergeHs
= mergeHs;
223
if
(replacements) {
224
ps.
replacements
= *replacements;
225
}
226
return
RDKit::v2::SmilesParse::MolFromSmarts
(sma, ps).release();
227
};
228
229
inline
Atom
*
SmartsToAtom
(
const
std::string &sma) {
230
return
RDKit::v2::SmilesParse::AtomFromSmarts
(sma).release();
231
}
232
inline
Bond
*
SmartsToBond
(
const
std::string &sma) {
233
return
RDKit::v2::SmilesParse::BondFromSmarts
(sma).release();
234
}
235
}
// namespace v1
236
237
inline
std::unique_ptr<RDKit::RWMol>
operator
""
_smiles(
const
char
*text,
238
size_t
len) {
239
std::string smi(text, len);
240
try
{
241
return
v2::SmilesParse::MolFromSmiles
(smi);
242
}
catch
(
const
RDKit::MolSanitizeException
&) {
243
return
nullptr
;
244
}
245
}
246
inline
std::unique_ptr<RDKit::RWMol>
operator
""
_smarts(
const
char
*text,
247
size_t
len) {
248
std::string smi(text, len);
249
return
v2::SmilesParse::MolFromSmarts
(smi);
250
}
251
252
}
// namespace RDKit
253
254
#endif
SanitException.h
RDKit::Atom
The class for representing atoms.
Definition
Atom.h:75
RDKit::Bond
class for representing a bond
Definition
Bond.h:48
RDKit::MolSanitizeException
class for flagging sanitization errors
Definition
SanitException.h:28
RDKit::RWMol
RWMol is a molecule class that is intended to be edited.
Definition
RWMol.h:32
RDKit::SmilesParse::SmilesParseException
Definition
SmilesParse.h:26
RDKit::SmilesParse::SmilesParseException::SmilesParseException
SmilesParseException(const std::string msg)
Definition
SmilesParse.h:29
RDKit::SmilesParse::SmilesParseException::SmilesParseException
SmilesParseException(const char *msg)
Definition
SmilesParse.h:28
RDKit::SmilesParse::SmilesParseException::~SmilesParseException
~SmilesParseException() noexcept override=default
RDKit::SmilesParse::SmilesParseException::what
const char * what() const noexcept override
Definition
SmilesParse.h:30
export.h
RDKIT_SMILESPARSE_EXPORT
#define RDKIT_SMILESPARSE_EXPORT
Definition
export.h:681
RDKit::SmilesParse
Definition
SmilesParse.h:25
RDKit::v1
Definition
ReactionParser.h:91
RDKit::v1::SmilesToAtom
Atom * SmilesToAtom(const std::string &smi)
Definition
SmilesParse.h:135
RDKit::v1::SmilesToBond
Bond * SmilesToBond(const std::string &smi)
Definition
SmilesParse.h:140
RDKit::v1::SmartsToMol
RWMol * SmartsToMol(const std::string &sma, const SmartsParserParams &ps)
Definition
SmilesParse.h:189
RDKit::v1::SmartsToBond
Bond * SmartsToBond(const std::string &sma)
Definition
SmilesParse.h:232
RDKit::v1::SmilesToMol
RDKit::RWMol * SmilesToMol(const std::string &smi, const SmilesParserParams &ps)
Definition
SmilesParse.h:118
RDKit::v1::SmartsToAtom
Atom * SmartsToAtom(const std::string &sma)
Definition
SmilesParse.h:229
RDKit::v2::SmilesParse
Definition
SmilesParse.h:40
RDKit::v2::SmilesParse::AtomFromSmiles
RDKIT_SMILESPARSE_EXPORT std::unique_ptr< RDKit::Atom > AtomFromSmiles(const std::string &smi)
RDKit::v2::SmilesParse::MolFromSmiles
RDKIT_SMILESPARSE_EXPORT std::unique_ptr< RDKit::RWMol > MolFromSmiles(const std::string &smi, const SmilesParserParams ¶ms=SmilesParserParams())
RDKit::v2::SmilesParse::BondFromSmiles
RDKIT_SMILESPARSE_EXPORT std::unique_ptr< RDKit::Bond > BondFromSmiles(const std::string &smi)
RDKit::v2::SmilesParse::AtomFromSmarts
RDKIT_SMILESPARSE_EXPORT std::unique_ptr< RDKit::Atom > AtomFromSmarts(const std::string &sma)
RDKit::v2::SmilesParse::BondFromSmarts
RDKIT_SMILESPARSE_EXPORT std::unique_ptr< RDKit::Bond > BondFromSmarts(const std::string &sma)
RDKit::v2::SmilesParse::MolFromSmarts
RDKIT_SMILESPARSE_EXPORT std::unique_ptr< RDKit::RWMol > MolFromSmarts(const std::string &sma, const SmartsParserParams ¶ms=SmartsParserParams())
RDKit::v2
Definition
ReactionParser.h:71
RDKit
Std stuff.
Definition
Abbreviations.h:19
RDKit::SmartsParserParams
Definition
SmilesParse.h:105
RDKit::v1::SmartsParserParams::replacements
std::map< std::string, std::string > * replacements
Definition
SmilesParse.h:107
RDKit::v1::SmartsParserParams::parseName
bool parseName
Definition
SmilesParse.h:112
RDKit::v1::SmartsParserParams::skipCleanup
bool skipCleanup
Definition
SmilesParse.h:115
RDKit::v1::SmartsParserParams::allowCXSMILES
bool allowCXSMILES
Definition
SmilesParse.h:109
RDKit::v1::SmartsParserParams::strictCXSMILES
bool strictCXSMILES
Definition
SmilesParse.h:110
RDKit::v1::SmartsParserParams::debugParse
int debugParse
Definition
SmilesParse.h:106
RDKit::v1::SmartsParserParams::mergeHs
bool mergeHs
Definition
SmilesParse.h:113
RDKit::SmilesParserParams
Definition
SmilesParse.h:92
RDKit::v1::SmilesParserParams::replacements
std::map< std::string, std::string > * replacements
Definition
SmilesParse.h:95
RDKit::v1::SmilesParserParams::sanitize
bool sanitize
Definition
SmilesParse.h:94
RDKit::v1::SmilesParserParams::removeHs
bool removeHs
Definition
SmilesParse.h:101
RDKit::v1::SmilesParserParams::allowCXSMILES
bool allowCXSMILES
Definition
SmilesParse.h:97
RDKit::v1::SmilesParserParams::strictCXSMILES
bool strictCXSMILES
Definition
SmilesParse.h:98
RDKit::v1::SmilesParserParams::skipCleanup
bool skipCleanup
Definition
SmilesParse.h:102
RDKit::v1::SmilesParserParams::debugParse
int debugParse
Definition
SmilesParse.h:93
RDKit::v1::SmilesParserParams::parseName
bool parseName
Definition
SmilesParse.h:100
RDKit::v2::SmilesParse::SmartsParserParams
Definition
SmilesParse.h:56
RDKit::v2::SmilesParse::SmartsParserParams::parseName
bool parseName
Definition
SmilesParse.h:60
RDKit::v2::SmilesParse::SmartsParserParams::strictCXSMILES
bool strictCXSMILES
Definition
SmilesParse.h:58
RDKit::v2::SmilesParse::SmartsParserParams::allowCXSMILES
bool allowCXSMILES
Definition
SmilesParse.h:57
RDKit::v2::SmilesParse::SmartsParserParams::skipCleanup
bool skipCleanup
Definition
SmilesParse.h:63
RDKit::v2::SmilesParse::SmartsParserParams::mergeHs
bool mergeHs
Definition
SmilesParse.h:61
RDKit::v2::SmilesParse::SmartsParserParams::replacements
std::map< std::string, std::string > replacements
Definition
SmilesParse.h:66
RDKit::v2::SmilesParse::SmartsParserParams::debugParse
bool debugParse
Definition
SmilesParse.h:64
RDKit::v2::SmilesParse::SmilesParserParams
Definition
SmilesParse.h:43
RDKit::v2::SmilesParse::SmilesParserParams::parseName
bool parseName
Definition
SmilesParse.h:48
RDKit::v2::SmilesParse::SmilesParserParams::strictCXSMILES
bool strictCXSMILES
Definition
SmilesParse.h:46
RDKit::v2::SmilesParse::SmilesParserParams::debugParse
bool debugParse
Definition
SmilesParse.h:51
RDKit::v2::SmilesParse::SmilesParserParams::allowCXSMILES
bool allowCXSMILES
Definition
SmilesParse.h:45
RDKit::v2::SmilesParse::SmilesParserParams::skipCleanup
bool skipCleanup
Definition
SmilesParse.h:50
RDKit::v2::SmilesParse::SmilesParserParams::sanitize
bool sanitize
Definition
SmilesParse.h:44
RDKit::v2::SmilesParse::SmilesParserParams::replacements
std::map< std::string, std::string > replacements
Definition
SmilesParse.h:53
RDKit::v2::SmilesParse::SmilesParserParams::removeHs
bool removeHs
Definition
SmilesParse.h:49
GraphMol
SmilesParse
SmilesParse.h
Generated on
for RDKit by
1.17.0