RDKit
Open-source cheminformatics and machine learning.
Loading...
Searching...
No Matches
MolSGroupWriting.h
Go to the documentation of this file.
1//
2// Copyright (C) 2002-2021 Greg Landrum and T5 Informatics GmbH
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#pragma once
12
14#include <boost/algorithm/string/trim.hpp>
15#include <boost/format.hpp>
18
19namespace RDKit {
20namespace SGroupWriting {
21typedef std::unordered_map<int, SubstanceGroup> IDX_TO_SGROUP_MAP;
22
23/* ------------------ Inlined Formatters ------------------ */
24
25inline std::string FormatV2000IntField(int value) {
26 auto fmt = boost::format(" %3d") % value;
27 return fmt.str();
28}
29
30inline std::string FormatV2000NumEntriesField(int value) {
31 auto fmt = boost::format(" %2d") % value;
32 return fmt.str();
33}
34
35inline std::string FormatV2000DoubleField(double value) {
36 auto fmt = boost::format("%10.4f") % value;
37 return fmt.str();
38}
39
40inline std::string FormatV2000StringField(const std::string &value,
41 unsigned int fieldSize, bool pad,
42 bool addSeparator) {
43 std::ostringstream os;
44 if (addSeparator) {
45 os << ' ';
46 }
47 if (value.size() >= fieldSize) {
48 os << value.substr(0, fieldSize);
49 } else if (pad) {
50 os << std::setw(fieldSize) << std::left << value;
51 } else {
52 os << value;
53 }
54 return os.str();
55}
56
57inline std::string FormatV3000DoubleField(double value) {
58 return boost::trim_copy(FormatV2000DoubleField(value));
59}
60
61/* ------------------ V2000 Utils ------------------ */
62
63std::string BuildV2000STYLines(const ROMol &mol);
64
65std::string BuildV2000StringPropLines(const unsigned int entriesPerLine,
66 const ROMol &mol,
67 const std::string &propName,
68 const std::string &propCode,
69 const unsigned int fieldWitdh);
70
71std::string BuildV2000SLBLines(const ROMol &mol);
72
73std::string BuildV2000SDSLines(const ROMol &mol);
74
75std::string BuildV2000SPLLines(const ROMol &mol);
76
77std::string BuildV2000SNCLines(const ROMol &mol);
78
79std::string BuildV2000SBTLines(const ROMol &mol);
80
81template <class T>
82std::string BuildV2000IdxVectorDataLines(const unsigned int entriesPerLine,
83 const unsigned int sGroupId,
84 const std::string &code,
85 const T &dataVector);
86
87std::string BuildV2000SMTLine(const int idx, const SubstanceGroup *sgroup);
88
89std::string BuildV2000SDILine(const int idx, const SubstanceGroup *sgroup);
90
91std::string BuildV2000SBVLine(const int idx, const SubstanceGroup *sgroup);
92
93std::string BuildV2000SDTLine(const int idx, const SubstanceGroup *sgroup);
94
95std::string BuildV2000SDDLine(const int idx, const SubstanceGroup *sgroup);
96
97std::string BuildV2000SCDSEDLines(const int idx, const SubstanceGroup *sgroup);
98
99std::string BuildV2000SAPLines(const int idx, const SubstanceGroup *sgroup);
100
101std::string BuildV2000SCLLine(const int idx, const SubstanceGroup *sgroup);
102const std::string GetMolFileSGroupInfo(const RWMol &mol);
103
104/* ------------------ V3000 Utils ------------------ */
105
106template <class T>
107std::string BuildV3000IdxVectorDataBlock(const std::string &key,
108 const std::vector<T *> &dataVector);
109
110template <class Iterator>
111std::string BuildV3000IdxVectorDataBlock(const std::string &key,
113 const Iterator &dataVectorEnd);
114
115/* Classify bonds between XBONDS and CBOfindP work on a copy of
116 * bonds vector to prevent reordering of original vector */
118
119std::string FormatV3000StringPropertyBlock(const std::string &prop,
120 const SubstanceGroup &sgroup);
121
123
125
127 const std::vector<SubstanceGroup::Bracket> brackets);
128
130 const std::vector<SubstanceGroup::CState> &cstates);
131
132const std::string GetV3000MolFileSGroupLines(const unsigned int idx,
133 const SubstanceGroup &sgroup);
134} // namespace SGroupWriting
135} // namespace RDKit
Defines the SubstanceGroup class.
RWMol is a molecule class that is intended to be edited.
Definition RWMol.h:32
The class for representing SubstanceGroups.
std::string BuildV2000SBTLines(const ROMol &mol)
std::string BuildV2000StringPropLines(const unsigned int entriesPerLine, const ROMol &mol, const std::string &propName, const std::string &propCode, const unsigned int fieldWitdh)
std::string FormatV3000CompNoBlock(const SubstanceGroup &sgroup)
std::string BuildV2000SCDSEDLines(const int idx, const SubstanceGroup *sgroup)
std::string BuildV2000STYLines(const ROMol &mol)
const std::string GetMolFileSGroupInfo(const RWMol &mol)
std::string BuildV2000SNCLines(const ROMol &mol)
const std::string GetV3000MolFileSGroupLines(const unsigned int idx, const SubstanceGroup &sgroup)
std::string BuildV2000SPLLines(const ROMol &mol)
std::string BuildV2000SLBLines(const ROMol &mol)
std::string FormatV3000CStateBlock(const std::vector< SubstanceGroup::CState > &cstates)
std::string FormatV3000BracketBlock(const std::vector< SubstanceGroup::Bracket > brackets)
std::string BuildV3000BondsBlock(const SubstanceGroup &sgroup)
std::string BuildV2000SDTLine(const int idx, const SubstanceGroup *sgroup)
std::string FormatV3000DoubleField(double value)
std::string BuildV2000SCLLine(const int idx, const SubstanceGroup *sgroup)
std::string BuildV2000SMTLine(const int idx, const SubstanceGroup *sgroup)
std::string BuildV2000SBVLine(const int idx, const SubstanceGroup *sgroup)
std::string BuildV2000SAPLines(const int idx, const SubstanceGroup *sgroup)
std::string FormatV3000StringPropertyBlock(const std::string &prop, const SubstanceGroup &sgroup)
std::string FormatV2000NumEntriesField(int value)
std::string FormatV2000StringField(const std::string &value, unsigned int fieldSize, bool pad, bool addSeparator)
std::string FormatV3000ParentBlock(const SubstanceGroup &sgroup)
std::string BuildV2000SDDLine(const int idx, const SubstanceGroup *sgroup)
std::unordered_map< int, SubstanceGroup > IDX_TO_SGROUP_MAP
std::string BuildV2000SDILine(const int idx, const SubstanceGroup *sgroup)
std::string FormatV2000DoubleField(double value)
std::string BuildV3000IdxVectorDataBlock(const std::string &key, const std::vector< T * > &dataVector)
std::string BuildV2000SDSLines(const ROMol &mol)
std::string FormatV2000IntField(int value)
std::string BuildV2000IdxVectorDataLines(const unsigned int entriesPerLine, const unsigned int sGroupId, const std::string &code, const T &dataVector)
Std stuff.
bool rdvalue_is(const RDValue_cast_t)