RDKit
Open-source cheminformatics and machine learning.
Loading...
Searching...
No Matches
MarvinDefs.h
Go to the documentation of this file.
1//
2// Copyright (C) 2022-2023 Tad Hurst, 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
11// This software is based on the Chemaxon documentation for the MRV format:P
12// https://docs.chemaxon.com/display/docs/marvin-documents-mrv.md
13// and this implmentation is tested against the parsing and generation in the
14// Marvin JS sketcher: https://marvinjs-demo.chemaxon.com/latest/demo.html
15
16#ifndef RD_MARVINDEFS_H
17#define RD_MARVINDEFS_H
18
19#include <GraphMol/RDKitBase.h>
20
22#include <boost/property_tree/xml_parser.hpp>
24
25#include <float.h> // Needed for DBL_MAX on Clang
26
27using boost::property_tree::ptree;
28
29namespace RDKit {
30
31const std::vector<std::string> sruSgroupConnectChoices{"hh", "ht", "eu"};
32const std::vector<std::string> marvinBondOrders{"1", "2", "3", "A"};
33const std::vector<std::string> marvinQueryBondsTypes{"SD", "SA", "DA", "Any"};
34const std::vector<std::string> marvinConventionTypes{"cxn:coord",
35 "cxn:hydrogen"};
36const std::vector<std::string> marvinStereoDictRefTypes{"cml:W", "cml:H"};
37const std::vector<std::string> marvinStereoConventionTypes{"1", "3", "4", "6"};
38
39const std::vector<std::string> marvinRadicalVals{
40 "monovalent", "divalent", "divalent1", "divalent3",
41 "trivalent", "trivalent2", "trivalent4", "4"};
42const std::map<std::string, int> marvinRadicalToRadicalElectrons{
43 {"monovalent", 1}, {"divalent", 2}, {"divalent1", 2}, {"divalent3", 2},
44 {"trivalent", 3}, {"trivalent2", 3}, {"trivalent4", 3}, {"4", 4}};
45
46const std::map<int, std::string> radicalElectronsToMarvinRadical{
47 {1, "monovalent"}, {2, "divalent"}, {3, "trivalent4"}, {4, "4"}};
48
54
55class MarvinWriterException : public std::runtime_error {
56 public:
57 explicit MarvinWriterException(std::string message)
58 : std::runtime_error(message) {};
59};
60
62 public:
63 std::string type;
64 double x1;
65 double y1;
66 double x2;
67 double y2;
68
69 std::string toString() const;
70 ptree toPtree() const;
71};
72
74 public:
75 std::string id;
76 double x1;
77 double y1;
78 double x2;
79 double y2;
80
81 std::string toString() const;
82 ptree toPtree() const;
83};
84
86 public:
87 std::string id;
88 std::string text;
89 double x;
90 double y;
91 double fontScale = 0.0;
92
93 std::string halign;
94 std::string valign;
95
96 std::string toString() const;
97 ptree toPtree() const;
98};
99
101 public:
102 // <attachmentPoint atom="a7" order="1" bond="b6"/>
103 std::string atom;
104 std::string bond;
105 std::string order;
106
107 std::string toString() const;
108 ptree toPtree() const;
109};
110
112 public:
113 std::string id;
114 std::string elementType;
115 double x2;
116 double y2;
117 double x3;
118 double y3;
119 double z3;
120
122 std::string radical;
126 std::string mrvAlias;
127 std::string mrvStereoGroup;
129 std::string sgroupRef;
130 bool sGroupRefIsSuperatom; // if set, we will not change the sgroupRef - the
131 // superatom really needs it
134
136 MarvinAtom(const MarvinAtom &atomToCopy, std::string newId);
137
138 bool operator==(const MarvinAtom &rhs) const;
139
140 bool operator==(const MarvinAtom *rhs) const;
141
142 bool isElement() const;
143
144 std::string toString() const;
145 ptree toPtree(unsigned int coordinatePrecision = 6) const;
146};
147
149 public:
150 std::string value;
151 std::string convention;
152 std::string conventionValue;
153 std::string dictRef;
154
155 std::string toString() const;
156 ptree toPtree() const;
157};
158
160 public:
161 std::string id;
162 std::string atomRefs2[2];
163 std::string order;
165 std::string queryType;
166 std::string convention;
167
169
170 MarvinBond(const MarvinBond &bondToCopy, std::string newId,
171 std::string atomRef1, std::string atomRef2);
172
173 bool isEqual(const MarvinAtom &other) const;
174
175 bool operator==(const MarvinAtom &rhs) const;
176
177 const std::string getBondType() const;
178
179 std::string toString() const;
180 ptree toPtree() const;
181};
182
184 protected:
186 bool centerIsStale = true;
187
188 public:
191
192 MarvinRectangle(double left, double right, double top, double bottom);
193 MarvinRectangle(const RDGeom::Point3D &upperLeftInit,
194 const RDGeom::Point3D &lowerRightInit);
195 MarvinRectangle(const std::vector<MarvinAtom *> &atoms);
196 MarvinRectangle(const std::vector<MarvinRectangle> &rects);
197
198 void extend(const MarvinRectangle &otherRectangle);
199
201
202 bool overlapsVertically(const MarvinRectangle &otherRectangle) const;
203
204 bool overlapsVHorizontally(const MarvinRectangle &otherRectangle) const;
205
207
209 MarvinRectangle &r2);
210};
211
212template <typename T>
213typename std::vector<std::unique_ptr<T>>::iterator findUniquePtr(
214 std::vector<std ::unique_ptr<T>> &vector, T *itemToFind) {
215 auto foundUniqIter = find_if(vector.begin(), vector.end(),
216 [itemToFind](std::unique_ptr<T> &uniquePtr) {
217 return uniquePtr.get() == itemToFind;
218 });
219
220 if (foundUniqIter == vector.end()) {
221 throw FileParseException("Unexpected error - item to find not found");
222 }
223
224 return foundUniqIter;
225}
226
227template <typename T>
228void eraseUniquePtr(std::vector<std ::unique_ptr<T>> &vector, T *itemToErase) {
229 auto removeUniqIter = findUniquePtr<T>(vector, itemToErase);
230
231 if (removeUniqIter == vector.end()) {
232 throw FileParseException("Unexpected error - item to remove not found");
233 }
234
235 vector.erase(removeUniqIter);
236}
237
239 public:
240 std::string molID;
241 std::string id; // used in all sGroups
242 unsigned int coordinatePrecision = 6;
243 std::vector<MarvinAtom *> atoms; // owned by parent MarvinMol
244 std::vector<MarvinBond *> bonds; // owned by parent MarvinMol
245 std::vector<std::unique_ptr<MarvinMolBase>> sgroups;
247
248 virtual std::string role() const = 0;
249 virtual bool hasAtomBondBlocks() const = 0;
250 virtual std::string toString() const = 0;
251 virtual ptree toPtree() const;
252 void addSgroupsToPtree(ptree &pt) const;
253
254 virtual MarvinMolBase *copyMol(const std::string &idAppend) const = 0;
255 virtual void pushOwnedAtom(MarvinAtom *atom);
256 virtual void pushOwnedBond(MarvinBond *bond);
257
258 virtual void removeOwnedAtom(MarvinAtom *atom);
259 virtual void removeOwnedBond(MarvinBond *bond);
260
261 void setPrecision(unsigned int precision);
262
263 int getExplicitValence(const MarvinAtom &marvinAtom) const;
264
266
267 virtual ~MarvinMolBase();
268
269 int getAtomIndex(std::string id) const;
270 int getBondIndex(std::string id) const;
271
272 const std::vector<std::string> getBondList() const;
273 const std::vector<std::string> getAtomList() const;
274 bool AnyOverLappingAtoms(const MarvinMolBase *otherMol) const;
275
277 int &molCount // this is the starting mol count, and receives the ending
278 // mol count - THis is used when
279 // MarvinMol->convertToSuperAtoms is called multiple times
280 // from a RXN
281 ,
282 int &atomCount // starting and ending atom count
283 ,
284 int &bondCount // starting and ending bond count
285 ,
286 int &sgCount // starting and ending sq count
287 ,
288 std::map<std::string, std::string>
289 &sgMap // map from old sg number to new sg number
290 ,
291 std::map<std::string, std::string>
292 &atomMap // map from old atom number to new atom number
293 ,
294 std::map<std::string, std::string>
295 &bondMap // map from old bond number to new bond number
296 );
297
298 // the following is virtual because some derived classes need to do more than
299 // just call the base class. Currently, only MarvinSuperatomSgroup does this
300 public:
302 int &molCount, // this is the starting mol count, and receives the ending
303 // mol count - THis is used when
304 // MarvinMol->convertToSuperAtoms is called multiple
305 // times from a RXN
306 int &atomCount, // starting and ending atom count
307 int &bondCount, // starting and ending bond count
308 std::map<std::string, std::string> &sgMap,
309 std::map<std::string, std::string> &atomMap,
310 std::map<std::string, std::string> &bondMap);
311
312 void cleanUpSgNumbering(int &sgCount,
313 std::map<std::string, std::string> &sgMap);
314
315 // the following is virtual because some derived classes need to do more than
316 // just call the base class. Currently, only MarvinSuperatomSgroup does this
317
319 const std::vector<MarvinAtom *> &setOfAtoms) const;
320
321 public:
322 static bool atomRefInAtoms(MarvinAtom *a, std::string b);
323 static bool bondRefInBonds(MarvinBond *a, std::string b);
324 static bool molIDInSgroups(std::string a, std::string b);
325 MarvinAtom *findAtomByRef(std::string atomId);
326 MarvinBond *findBondByRef(std::string atomId);
327
330
331 virtual bool isPassiveRoleForExpansion() const;
332 virtual bool isPassiveRoleForContraction() const;
333 virtual void processSpecialSgroups();
335 std::unique_ptr<SubstanceGroup> &sgroup,
336 int sequenceId);
337
338 bool has2dCoords() const;
339 bool has3dCoords() const;
340 bool hasAny3dCoords() const;
341 bool hasAny2dCoords() const;
342 bool hasCoords() const;
344
345 void parseAtomsAndBonds(ptree &molTree);
346};
347
349 private:
350 std::string roleName; // could be MarvinSruSgroup, MarvinCopolymerSgroup or
351 // MarvinModificationSgroup
352 public:
353 MarvinMolBase *copyMol(const std::string &idAppend) const override;
355 MarvinSruCoModSgroup(MarvinMolBase *parent, std::string role, ptree &molTree);
356
357 std::string title;
358 std::string connect;
359 std::string correspondence;
360
361 std::string toString() const override;
362 ptree toPtree() const override;
363
364 std::string role() const override;
365 bool hasAtomBondBlocks() const override;
367 std::unique_ptr<SubstanceGroup> &sgroup,
368 int sequenceId) override;
369};
370
372 public:
375
376 MarvinMolBase *copyMol(const std::string &idAppend) const override;
377
378 std::string context;
379 std::string fieldName;
380 std::string placement;
381 std::string unitsDisplayed;
382 std::string queryType;
383 std::string queryOp;
384 std::string fieldData;
385 std::string units;
386 double x;
387 double y;
388
389 std::string toString() const override;
390 ptree toPtree() const override;
391
392 std::string role() const override;
393 bool hasAtomBondBlocks() const override;
395 std::unique_ptr<SubstanceGroup> &sgroup,
396 int sequenceId) override;
397};
398
400 public:
401 std::string title;
402
405
406 MarvinMolBase *copyMol(const std::string &idAppend) const override;
407
409
411
412 std::string toString() const override;
413 ptree toPtree() const override;
414
415 std::string role() const override;
416 bool hasAtomBondBlocks() const override;
417 bool isPassiveRoleForContraction() const override;
418
420 std::unique_ptr<SubstanceGroup> &sgroup,
421 int sequenceId) override;
422};
423
425 public:
428
429 MarvinMolBase *copyMol(const std::string &idAppend) const override;
430
431 std::string title;
432 bool isExpanded = false;
433 std::vector<MarvinAtom *> parentAtoms;
434 std::vector<MarvinBond *>
435 bondsToAtomsNotInExpandedGroup; // only when expanded
436
439 int getMatchedOrphanBondIndex(std::string atomIdToCheck,
440 std::vector<MarvinBond *> &bondsToTry,
441 std::vector<MarvinBond *> &orphanedBonds) const;
442
443 std::string toString() const override;
444 ptree toPtree() const override;
445
446 std::string role() const override;
447 bool hasAtomBondBlocks() const override;
448 bool isPassiveRoleForExpansion() const override;
449 bool isPassiveRoleForContraction() const override;
450 void processSpecialSgroups() override;
451
453 std::unique_ptr<SubstanceGroup> &sgroup,
454 int sequenceId) override;
455};
456
458 // <molecule molID="m2" id="sg1" role="MulticenterSgroup" atomRefs="a2 a6 a5
459 // a4 a3" center="a18"/>sgroup->
460 public:
463
464 MarvinMolBase *copyMol(const std::string &idAppend) const override;
465
467
468 std::string toString() const override;
469 ptree toPtree() const override;
470
472 std::string role() const override;
473 bool hasAtomBondBlocks() const override;
474 void processSpecialSgroups() override;
476 std::unique_ptr<SubstanceGroup> &sgroup,
477 int sequenceId) override;
478};
479
481 // <molecule molID="m2" id="sg1" role="GenericSgroup" atomRefs="a1 a2 a3 a4 a5
482 // a6 a7 a8 a9 a13 a10 a11 a12" charge="onAtoms"/></molecule>
483 public:
486
487 MarvinMolBase *copyMol(const std::string &idAppend) const override;
488
489 std::string charge; // onAtoms or onBrackets
490 std::string toString() const override;
491 ptree toPtree() const override;
492
493 std::string role() const override;
494 bool hasAtomBondBlocks() const override;
496 std::unique_ptr<SubstanceGroup> &sgroup,
497 int sequenceId) override;
498};
499
501 // <molecule id="sg1" role="MonomerSgroup" title="mon" charge="onAtoms"
502 // molID="m2" atomRefs="a2 a1 a3 a4">
503 // </molecule>
504 public:
507
508 MarvinMolBase *copyMol(const std::string &idAppend) const override;
509
510 std::string title;
511 std::string charge; // onAtoms or onBrackets
512 std::string toString() const override;
513 ptree toPtree() const override;
514
515 std::string role() const override;
516 bool hasAtomBondBlocks() const override;
518 std::unique_ptr<SubstanceGroup> &sgroup,
519 int sequenceId) override;
520};
521
523 public:
524 std::string title;
525 std::vector<std::unique_ptr<MarvinAttachmentPoint>> attachmentPoints;
526
529
530 MarvinMolBase *copyMol(const std::string &idAppend) const override;
531
533
535
536 std::string role() const override;
537 bool hasAtomBondBlocks() const override;
538 bool isPassiveRoleForExpansion() const override;
539
540 std::string toString() const override;
541 ptree toPtree() const override;
542
544 int &molCount, // this is the starting mol count, and receives the ending
545 // mol count - THis is used when
546 // MarvinMol->convertToSuperAtoms is called multiple
547 // times from a RXN
548 int &atomCount, // starting and ending atom count
549 int &bondCount, // starting and ending bond count
550 std::map<std::string, std::string> &sgMap,
551 std::map<std::string, std::string> &atomMap,
552 std::map<std::string, std::string> &bondMap) override;
553
555 const std::vector<MarvinAtom *> &setOfAtoms) const override;
556
557 void processSpecialSgroups() override;
558};
559
560class MarvinMol : public MarvinMolBase {
561 public:
563 MarvinMol(ptree &molTree);
564
565 MarvinMolBase *copyMol(const std::string &idAppend) const override;
566
567 ~MarvinMol() override;
568
569 std::vector<std::unique_ptr<MarvinAtom>> ownedAtoms;
570 std::vector<std::unique_ptr<MarvinBond>> ownedBonds;
571
572 void pushOwnedAtom(MarvinAtom *atom) override;
573 void pushOwnedBond(MarvinBond *bond) override;
574
575 void removeOwnedAtom(MarvinAtom *atom) override;
576 void removeOwnedBond(MarvinBond *bond) override;
577
578 std::string role() const override;
579 bool hasAtomBondBlocks() const override;
580 bool isPassiveRoleForContraction() const override;
581
582 std::string toString() const override;
583 ptree toPtree() const override;
584
585 std::string generateMolString();
586 ptree toMolPtree() const;
587};
588
590 public:
591 std::vector<std::unique_ptr<MarvinMol>> reactants;
592 std::vector<std::unique_ptr<MarvinMol>> agents;
593 std::vector<std::unique_ptr<MarvinMol>> products;
594
596 std::vector<std::unique_ptr<MarvinPlus>> pluses;
597 std::vector<std::unique_ptr<MarvinCondition>> conditions;
598
600
602
603 std::string toString();
604 ptree toPtree() const;
605};
606
608 public:
609 StereoGroupType groupType; // one of ABS AND OR
611 std::vector<unsigned int> atoms;
612
613 MarvinStereoGroup(StereoGroupType grouptypeInit, int groupNumberInit);
614};
615
616template <typename T>
617bool getCleanNumber(std::string strToParse, T &outInt);
618} // namespace RDKit
619
620#endif // RD_MARVINDEFS_H
pulls in the core RDKit functionality
used by various file parsing classes to indicate a parse error
ptree toPtree() const
std::string toString() const
std::string type
Definition MarvinDefs.h:63
std::string mrvStereoGroup
Definition MarvinDefs.h:127
bool isElement() const
std::string id
Definition MarvinDefs.h:113
std::string elementType
Definition MarvinDefs.h:114
std::string toString() const
ptree toPtree(unsigned int coordinatePrecision=6) const
std::string sgroupRef
Definition MarvinDefs.h:129
std::string radical
Definition MarvinDefs.h:122
std::string sgroupAttachmentPoint
Definition MarvinDefs.h:132
MarvinAtom(const MarvinAtom &atomToCopy, std::string newId)
bool operator==(const MarvinAtom &rhs) const
bool operator==(const MarvinAtom *rhs) const
std::string mrvAlias
Definition MarvinDefs.h:126
std::string toString() const
std::string conventionValue
Definition MarvinDefs.h:152
std::string toString() const
std::string convention
Definition MarvinDefs.h:166
ptree toPtree() const
std::string queryType
Definition MarvinDefs.h:165
MarvinBond(const MarvinBond &bondToCopy, std::string newId, std::string atomRef1, std::string atomRef2)
std::string atomRefs2[2]
Definition MarvinDefs.h:162
std::string id
Definition MarvinDefs.h:161
std::string order
Definition MarvinDefs.h:163
MarvinBondStereo bondStereo
Definition MarvinDefs.h:164
bool operator==(const MarvinAtom &rhs) const
const std::string getBondType() const
bool isEqual(const MarvinAtom &other) const
std::string toString() const
std::string toString() const
ptree toPtree() const
bool hasAtomBondBlocks() const override
MarvinDataSgroup(MarvinMolBase *parent)
std::string unitsDisplayed
Definition MarvinDefs.h:381
MarvinDataSgroup(MarvinMolBase *parent, ptree &molTree)
MarvinMolBase * copyMol(const std::string &idAppend) const override
void parseMoleculeSpecific(RDKit::RWMol *mol, std::unique_ptr< SubstanceGroup > &sgroup, int sequenceId) override
std::string role() const override
ptree toPtree() const override
std::string toString() const override
bool hasAtomBondBlocks() const override
ptree toPtree() const override
MarvinGenericSgroup(MarvinMolBase *parent, ptree &molTree)
std::string toString() const override
MarvinMolBase * copyMol(const std::string &idAppend) const override
std::string role() const override
void parseMoleculeSpecific(RDKit::RWMol *mol, std::unique_ptr< SubstanceGroup > &sgroup, int sequenceId) override
MarvinGenericSgroup(MarvinMolBase *parent)
unsigned int coordinatePrecision
Definition MarvinDefs.h:242
bool AnyOverLappingAtoms(const MarvinMolBase *otherMol) const
void cleanUpNumbering(int &molCount, int &atomCount, int &bondCount, int &sgCount, std::map< std::string, std::string > &sgMap, std::map< std::string, std::string > &atomMap, std::map< std::string, std::string > &bondMap)
void cleanUpSgNumbering(int &sgCount, std::map< std::string, std::string > &sgMap)
void setPrecision(unsigned int precision)
virtual std::string role() const =0
const std::vector< std::string > getAtomList() const
virtual MarvinMolBase * copyMol(const std::string &idAppend) const =0
virtual void processSpecialSgroups()
virtual ~MarvinMolBase()
const std::vector< std::string > getBondList() const
static bool atomRefInAtoms(MarvinAtom *a, std::string b)
int getBondIndex(std::string id) const
std::vector< MarvinBond * > bonds
Definition MarvinDefs.h:244
bool hasAny2dCoords() const
virtual std::string toString() const =0
virtual void pushOwnedBond(MarvinBond *bond)
virtual bool isPassiveRoleForExpansion() const
bool has3dCoords() const
virtual bool hasAtomBondBlocks() const =0
virtual void removeOwnedBond(MarvinBond *bond)
void addSgroupsToPtree(ptree &pt) const
virtual void parseMoleculeSpecific(RDKit::RWMol *mol, std::unique_ptr< SubstanceGroup > &sgroup, int sequenceId)
std::vector< std::unique_ptr< MarvinMolBase > > sgroups
Definition MarvinDefs.h:245
virtual ptree toPtree() const
virtual bool isPassiveRoleForContraction() const
int getAtomIndex(std::string id) const
MarvinAtom * findAtomByRef(std::string atomId)
virtual IsSgroupInAtomSetResult isSgroupInSetOfAtoms(const std::vector< MarvinAtom * > &setOfAtoms) const
void parseAtomsAndBonds(ptree &molTree)
MarvinBond * findBondByRef(std::string atomId)
MarvinMolBase * parent
Definition MarvinDefs.h:246
virtual void pushOwnedAtom(MarvinAtom *atom)
static bool molIDInSgroups(std::string a, std::string b)
std::vector< MarvinAtom * > atoms
Definition MarvinDefs.h:243
bool hasAny3dCoords() const
void processSgroupsFromRDKit()
static bool bondRefInBonds(MarvinBond *a, std::string b)
int getExplicitValence(const MarvinAtom &marvinAtom) const
virtual void removeOwnedAtom(MarvinAtom *atom)
bool has2dCoords() const
virtual void cleanUpNumberingMolsAtomsBonds(int &molCount, int &atomCount, int &bondCount, std::map< std::string, std::string > &sgMap, std::map< std::string, std::string > &atomMap, std::map< std::string, std::string > &bondMap)
bool hasCoords() const
bool isPassiveRoleForContraction() const override
bool hasAtomBondBlocks() const override
std::vector< std::unique_ptr< MarvinAtom > > ownedAtoms
Definition MarvinDefs.h:569
void removeOwnedBond(MarvinBond *bond) override
MarvinMol(ptree &molTree)
std::string generateMolString()
void pushOwnedBond(MarvinBond *bond) override
std::string role() const override
MarvinMolBase * copyMol(const std::string &idAppend) const override
ptree toPtree() const override
ptree toMolPtree() const
void pushOwnedAtom(MarvinAtom *atom) override
std::vector< std::unique_ptr< MarvinBond > > ownedBonds
Definition MarvinDefs.h:570
~MarvinMol() override
void removeOwnedAtom(MarvinAtom *atom) override
std::string toString() const override
bool hasAtomBondBlocks() const override
ptree toPtree() const override
std::string toString() const override
void parseMoleculeSpecific(RDKit::RWMol *mol, std::unique_ptr< SubstanceGroup > &sgroup, int sequenceId) override
MarvinMonomerSgroup(MarvinMolBase *parent, ptree &molTree)
MarvinMonomerSgroup(MarvinMolBase *parent)
std::string role() const override
MarvinMolBase * copyMol(const std::string &idAppend) const override
std::string role() const override
void processSpecialSgroups() override
bool hasAtomBondBlocks() const override
MarvinMolBase * copyMol(const std::string &idAppend) const override
std::string toString() const override
MarvinMulticenterSgroup(MarvinMolBase *parent, ptree &molTree)
MarvinMulticenterSgroup(MarvinMolBase *parent)
ptree toPtree() const override
void parseMoleculeSpecific(RDKit::RWMol *mol, std::unique_ptr< SubstanceGroup > &sgroup, int sequenceId) override
int getMatchedOrphanBondIndex(std::string atomIdToCheck, std::vector< MarvinBond * > &bondsToTry, std::vector< MarvinBond * > &orphanedBonds) const
MarvinMultipleSgroup(MarvinMolBase *parent)
std::string role() const override
std::string toString() const override
bool isPassiveRoleForContraction() const override
MarvinMolBase * copyMol(const std::string &idAppend) const override
std::vector< MarvinAtom * > parentAtoms
Definition MarvinDefs.h:433
ptree toPtree() const override
void processSpecialSgroups() override
MarvinMultipleSgroup(MarvinMolBase *parent, ptree &molTree)
void parseMoleculeSpecific(RDKit::RWMol *mol, std::unique_ptr< SubstanceGroup > &sgroup, int sequenceId) override
bool hasAtomBondBlocks() const override
bool isPassiveRoleForExpansion() const override
std::vector< MarvinBond * > bondsToAtomsNotInExpandedGroup
Definition MarvinDefs.h:435
std::string toString() const
ptree toPtree() const
std::string id
Definition MarvinDefs.h:75
std::vector< std::unique_ptr< MarvinMol > > products
Definition MarvinDefs.h:593
ptree toPtree() const
std::vector< std::unique_ptr< MarvinCondition > > conditions
Definition MarvinDefs.h:597
std::string toString()
std::vector< std::unique_ptr< MarvinPlus > > pluses
Definition MarvinDefs.h:596
std::vector< std::unique_ptr< MarvinMol > > reactants
Definition MarvinDefs.h:591
std::vector< std::unique_ptr< MarvinMol > > agents
Definition MarvinDefs.h:592
MarvinRectangle(const std::vector< MarvinAtom * > &atoms)
bool overlapsVertically(const MarvinRectangle &otherRectangle) const
static bool compareRectanglesByYReverse(MarvinRectangle &r1, MarvinRectangle &r2)
MarvinRectangle(const RDGeom::Point3D &upperLeftInit, const RDGeom::Point3D &lowerRightInit)
RDGeom::Point3D & getCenter()
bool overlapsVHorizontally(const MarvinRectangle &otherRectangle) const
RDGeom::Point3D center
Definition MarvinDefs.h:185
static bool compareRectanglesByX(MarvinRectangle &r1, MarvinRectangle &r2)
RDGeom::Point3D upperLeft
Definition MarvinDefs.h:189
RDGeom::Point3D lowerRight
Definition MarvinDefs.h:190
MarvinRectangle(double left, double right, double top, double bottom)
MarvinRectangle(const std::vector< MarvinRectangle > &rects)
void extend(const MarvinRectangle &otherRectangle)
std::string role() const override
ptree toPtree() const override
bool hasAtomBondBlocks() const override
void parseMoleculeSpecific(RDKit::RWMol *mol, std::unique_ptr< SubstanceGroup > &sgroup, int sequenceId) override
MarvinSruCoModSgroup(std::string type, MarvinMolBase *parent)
std::string toString() const override
MarvinMolBase * copyMol(const std::string &idAppend) const override
MarvinSruCoModSgroup(MarvinMolBase *parent, std::string role, ptree &molTree)
StereoGroupType groupType
Definition MarvinDefs.h:609
std::vector< unsigned int > atoms
Definition MarvinDefs.h:611
MarvinStereoGroup(StereoGroupType grouptypeInit, int groupNumberInit)
bool isPassiveRoleForContraction() const override
std::string toString() const override
MarvinMolBase * copyMol(const std::string &idAppend) const override
MarvinSuperatomSgroupExpanded(MarvinMolBase *parent, ptree &molTree)
ptree toPtree() const override
MarvinSuperatomSgroupExpanded(MarvinMolBase *parent)
void parseMoleculeSpecific(RDKit::RWMol *mol, std::unique_ptr< SubstanceGroup > &sgroup, int sequenceId) override
bool hasAtomBondBlocks() const override
std::string role() const override
MarvinMolBase * copyMol(const std::string &idAppend) const override
std::string toString() const override
bool isPassiveRoleForExpansion() const override
void cleanUpNumberingMolsAtomsBonds(int &molCount, int &atomCount, int &bondCount, std::map< std::string, std::string > &sgMap, std::map< std::string, std::string > &atomMap, std::map< std::string, std::string > &bondMap) override
void processSpecialSgroups() override
ptree toPtree() const override
MarvinSuperatomSgroup(MarvinMolBase *parent, ptree &molTree)
std::string role() const override
MarvinSuperatomSgroup(MarvinMolBase *parent)
std::vector< std::unique_ptr< MarvinAttachmentPoint > > attachmentPoints
Definition MarvinDefs.h:525
bool hasAtomBondBlocks() const override
IsSgroupInAtomSetResult isSgroupInSetOfAtoms(const std::vector< MarvinAtom * > &setOfAtoms) const override
MarvinWriterException(std::string message)
Definition MarvinDefs.h:57
RWMol is a molecule class that is intended to be edited.
Definition RWMol.h:32
Std stuff.
const std::vector< std::string > marvinStereoConventionTypes
Definition MarvinDefs.h:37
const std::vector< std::string > marvinBondOrders
Definition MarvinDefs.h:32
StereoGroupType
Definition StereoGroup.h:30
const std::vector< std::string > sruSgroupConnectChoices
Definition MarvinDefs.h:31
const std::vector< std::string > marvinConventionTypes
Definition MarvinDefs.h:34
IsSgroupInAtomSetResult
Definition MarvinDefs.h:49
@ SgroupInAtomSet
Definition MarvinDefs.h:50
@ SgroupNotInAtomSet
Definition MarvinDefs.h:51
@ SgroupBothInAndNotInAtomSet
Definition MarvinDefs.h:52
void eraseUniquePtr(std::vector< std ::unique_ptr< T > > &vector, T *itemToErase)
Definition MarvinDefs.h:228
const std::map< int, std::string > radicalElectronsToMarvinRadical
Definition MarvinDefs.h:46
bool getCleanNumber(std::string strToParse, T &outInt)
const std::vector< std::string > marvinRadicalVals
Definition MarvinDefs.h:39
const std::vector< std::string > marvinStereoDictRefTypes
Definition MarvinDefs.h:36
const std::vector< std::string > marvinQueryBondsTypes
Definition MarvinDefs.h:33
std::vector< std::unique_ptr< T > >::iterator findUniquePtr(std::vector< std ::unique_ptr< T > > &vector, T *itemToFind)
Definition MarvinDefs.h:213
const std::map< std::string, int > marvinRadicalToRadicalElectrons
Definition MarvinDefs.h:42