BALL
1.4.2
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
include
BALL
MOLMEC
AMBER
GAFFCESParser.h
Go to the documentation of this file.
1
// -*- Mode: C++; tab-width: 2; -*-
2
// vi: set ts=2:
3
4
#ifndef BALL_MOLMEC_AMBER_GAFFCESPARSER_H
5
#define BALL_MOLMEC_AMBER_GAFFCESPARSER_H
6
7
#ifndef BALL_KERNEL_ATOM_H
8
#include <
BALL/KERNEL/atom.h
>
9
#endif
10
11
#ifndef BALL_DATATYPE_STRING_H
12
#include <
BALL/DATATYPE/string.h
>
13
#endif
14
15
#include <set>
16
#include <map>
17
#include <vector>
18
19
namespace
BALL
20
{
21
22
class
GAFFCESParser
23
{
24
public
:
25
26
//atomic property string
27
class
APSMatcher
28
{
29
public
:
30
//encode Ringatomtypes
31
enum
APSType
32
{
33
IS_RING_ATOM
,
34
IS_NON_RING_ATOM
,
35
IS_PLANAR
,
36
IS_PLANAR_WITH_DB_TO_NR
,
37
IS_PURELY_AROMATIC
,
38
IS_PURELY_ALIPHATIC
,
39
IS_OTHER_RING
,
40
IS_3_RING_ATOM
,
41
IS_4_RING_ATOM
,
42
IS_5_RING_ATOM
,
43
IS_6_RING_ATOM
,
44
IS_7_RING_ATOM
,
45
IS_8_RING_ATOM
,
46
IS_9_RING_ATOM
,
47
PURE_SINGLE_BOND
,
48
PURE_SINGLE_BOND_TO_PARENT
,
49
NO_PURE_SINGLE_BOND_TO_PARENT
,
50
SINGLE_BOND
,
51
SINGLE_BOND_TO_PARENT
,
52
NO_SINGLE_BOND_TO_PARENT
,
53
PURE_DOUBLE_BOND
,
54
PURE_DOUBLE_BOND_TO_PARENT
,
55
NO_PURE_DOUBLE_BOND_TO_PARENT
,
56
DOUBLE_BOND
,
57
DOUBLE_BOND_TO_PARENT
,
58
NO_DOUBLE_BOND_TO_PARENT
,
59
TRIPLE_BOND
,
60
TRIPLE_BOND_TO_PARENT
,
61
NO_TRIPLE_BOND_TO_PARENT
,
62
DELOCALIZED_BOND
,
63
DELOCALIZED_BOND_TO_PARENT
,
64
NO_DELOCALIZED_BOND_TO_PARENT
,
65
AROMATIC_BOND
,
66
AROMATIC_BOND_TO_PARENT
,
67
NO_AROMATIC_BOND_TO_PARENT
,
68
APS_TRUE
69
};
70
71
class
APSTerm
72
{
73
public
:
74
APSTerm
(
APSType
new_type,
int
new_feature_number)
75
:
type
(new_type),
76
feature_number
(new_feature_number)
77
{}
78
79
APSType
type
;
80
//contain the number of occurence of a given feature
81
int
feature_number
;
82
};
83
84
//check if current atom is in a ring
85
bool
isRingAtom
(
Atom
& atom);
86
//check if the current atom is in a ring with size n
87
//and return the number of occurence
88
int
isNRingAtom
(
Size
size,
Atom
& atom);
89
//check if the current atom is not a ringatom or
90
//in a ten-membered or larger ring
91
bool
isNonRingAtom
(
Atom
& atom);
92
93
bool
checkGAFFProperties
(
Atom
& atom,
Atom
& predecessor,
APSTerm
aps);
94
95
96
APSMatcher
();
97
~APSMatcher
();
98
99
String
printAPS
();
100
101
// check if atom matches atomic property string
102
bool
operator()
(
Atom
& atom,
Atom
& predecessor);
103
104
//store atomic property string
105
//external vector: all AND (",") types
106
//internal vector: all OR (".")types
107
std::vector < std::vector< APSTerm> >
aps_terms
;
108
109
protected
:
110
bool
hasBond_
(
Atom
* atom,
Atom
* predecessor,
int
bond_type,
int
feature_number);
111
};
112
113
struct
State
114
{
115
//not "thread-safe"
116
GAFFCESParser
*
current_parser
;
117
118
APSMatcher::APSType
current_aps_type
;
119
int
feature_number
;
120
};
121
122
123
124
//chemical environment string
125
class
CESPredicate
126
{
127
public
:
128
//encode wildcard elements
129
enum
CESwildcards
130
{
131
XA
,
XB
,
XC
,
XD
,
XX
132
};
133
134
CESPredicate
(
GAFFCESParser
* parser)
135
:
parent
(0),
136
atom_to_test
(0),
137
parser_
(parser)
138
{
139
initStringToWildcard
();
140
};
141
142
virtual
~CESPredicate
();
143
144
//initialize stringToWildcard map
145
void
initStringToWildcard
();
146
std::map<String, CESwildcards>
getStringToWildcard
();
147
148
//add a CESwildcardsConnectionPredicate to "predicate tree"
149
void
addCESwildcardsConnectionPredicate
(
String
wildcard,
Size
partners);
150
//add a CESwilddcardsPredicate to "predicate tree"
151
void
addCESwildcardsPredicate
(
String
wildcard);
152
//add an CESelementPredicate to "predicate tree"
153
void
addCESelementPredicate
(
String
name);
154
//add an CESelementConnectionPredicate to "predicate tree"
155
void
addCESelementConnectionPredicate
(
Size
partners,
String
name);
156
// add a TruePredicate to "predicate tree"
157
void
addTruePredicate
()
const
;
158
159
//check if atom and its environment match predicates
160
virtual
bool
operator ()
(
Atom
& atom);
161
//check if atom matches "predicates in predicate-tree"
162
virtual
bool
match
(
Atom
&){
return
false
;};
163
//delete children
164
void
clear
();
165
166
// check whether this atom is contained on a path to the root
167
bool
alreadySeenThisAtom
(
Atom
* atom);
168
169
//to expand aps_term in aps_matcher object
170
void
addNewAND
();
171
void
addNewOR
(
APSMatcher::APSType
aps,
int
feature_number);
172
173
//store existing atomic property string
174
APSMatcher
aps_matcher
;
175
176
//all CESPredicates for current_predicate ->children of current_predicate
177
std::vector<CESPredicate*>
children
;
178
//CESPredicate, that has current_predicate in his children vector
179
CESPredicate
*
parent
;
180
181
//The atom we are trying to match to this predicate
182
Atom
*
atom_to_test
;
183
protected
:
184
//map to convert String into wildcard-element
185
std::map<String, CESwildcards >
stringToWildcard_
;
186
GAFFCESParser
*
parser_
;
187
};
188
189
//element-name of the partnerAtom and number of its connected atoms
190
class
CESelementConnectionPredicate
:
public
CESPredicate
191
{
192
public
:
193
CESelementConnectionPredicate
(
GAFFCESParser
* parser)
194
:
CESPredicate
(parser),
195
numberOfPartners_
(0),
196
elementName_
(
"NoName"
)
197
{};
198
199
~CESelementConnectionPredicate
();
200
201
void
setNumberOfPartners
(
Size
number);
202
void
setElementName
(
String
name);
203
Size
getNumberOfPartners
();
204
String
getElementName
();
205
//check if atom matches predicate
206
bool
match
(
Atom
& atom);
207
protected
:
208
Size
numberOfPartners_
;
209
String
elementName_
;
210
};
211
212
//element-name of the partnerAtom
213
class
CESelementPredicate
:
public
CESPredicate
214
{
215
public
:
216
CESelementPredicate
(
GAFFCESParser
* parser)
217
:
CESPredicate
(parser),
218
elementName_
(
"NoName"
)
219
{
220
};
221
222
~CESelementPredicate
();
223
224
void
setElementName
(
String
name);
225
String
getElementName
();
226
//check if atom matches predicate
227
bool
match
(
Atom
& atom);
228
protected
:
229
String
elementName_
;
230
};
231
232
//XA,XB,XC,XD,XX
233
class
CESwildcardsPredicate
:
public
CESPredicate
234
{
235
public
:
236
CESwildcardsPredicate
(
GAFFCESParser
* parser)
237
:
CESPredicate
(parser)
238
{};
239
240
~CESwildcardsPredicate
();
241
242
void
setWildcards
(
String
new_wildcard);
243
CESwildcards
getWildcards
();
244
//checks if atom matches the given wildcard-element (XA, XB, XC, XD, XX)
245
bool
matchWildcards
(
Atom
& atom);
246
//check if atom matches predicate
247
bool
match
(
Atom
& atom);
248
protected
:
249
CESwildcards
wildcards_
;
250
};
251
252
//XA,XB,XC,XD,XX and number of partnerAtoms
253
class
CESwildcardsConnectionPredicate
:
public
CESPredicate
254
{
255
public
:
256
CESwildcardsConnectionPredicate
(
GAFFCESParser
* parser)
257
:
CESPredicate
(parser),
258
numberOfPartners_
(0)
259
{};
260
~CESwildcardsConnectionPredicate
();
261
262
void
setNumberOfPartners
(
Size
number);
263
void
setWildcards
(
String
new_wildcard);
264
Size
getNumberOfPartners
();
265
CESwildcards
getWildcards
();
266
//checks if atom matches the given wildcard-element (XA, XB, XC, XD, XX)
267
bool
matchWildcards
(
Atom
& atom);
268
//check if atom matches predicate
269
bool
match
(
Atom
& atom);
270
protected
:
271
CESwildcards
wildcards_
;
272
Size
numberOfPartners_
;
273
};
274
275
//string is "*" which means always true
276
class
TruePredicate
:
public
CESPredicate
277
{
278
public
:
279
TruePredicate
(
GAFFCESParser
* parser)
280
:
CESPredicate
(parser)
281
{};
282
~TruePredicate
() {};
283
//check if atom matches predicate (always true!)
284
bool
match
(
Atom
&) {
return
true
; }
285
};
286
287
//Parser-match-Function checking if atom's environment matches the "predicate tree"
288
bool
match
(
Atom
& atom)
const
;
289
290
//initialize Set of Elementsymbols
291
void
initElementSymbols
();
292
const
std::set<String>&
getElementSymbols
();
293
294
GAFFCESParser
();
295
GAFFCESParser
(
const
String
& cesstring);
296
~GAFFCESParser
();
297
298
//for lexer/parser
299
Size
read
(
char
* buf,
Size
max_size);
300
301
static
State
state
;
302
304
TruePredicate
root
;
305
//fixed root of the "predicate tree"
306
CESPredicate
*
root_predicate
;
307
//parent-predicate of current_predicate
308
CESPredicate
*
current_root_predicate
;
309
//"predicate-node" in the "predicate tree" we actually considering
310
CESPredicate
*
current_predicate
;
311
312
313
//parse chemical environment string
314
bool
parse
(
const
String
& cesstring);
315
//check if any atom matches parsed ces_string
316
bool
GAFFCESatomMatcher
(
Atom
& atom,
const
String
& cesstring);
317
//start filling the children vector for a current predicate
318
void
startChildPredicates
();
319
//end up filling the children vector for a current predicate
320
void
endChildPredicates
();
321
322
protected
:
323
//current chemical environment string
324
String
cesstring_
;
325
//set with all valid element symbols
326
std::set<String>
element_symbols_
;
327
//for Parser/Lexer function YYINPUT
328
Position
read_start_
;
329
};
330
331
}
332
333
#endif
Generated by
1.8.3.1