RDKit
Open-source cheminformatics and machine learning.
MolSGroupParsing.h
Go to the documentation of this file.
1 //
2 // Copyright (C) 2002-2018 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 #include <RDGeneral/export.h>
11 
12 #pragma once
15 #include <sstream>
16 
17 namespace RDKit {
18 
19 namespace SGroupParsing {
20 typedef std::map<int, SubstanceGroup> IDX_TO_SGROUP_MAP;
21 typedef std::map<int, STR_VECT> IDX_TO_STR_VECT_MAP;
22 
23 /* ------------------ V2000 Utils ------------------ */
24 
25 unsigned int ParseSGroupIntField(const std::string &text, unsigned int line,
26  unsigned int &pos,
27  bool isFieldCounter = false);
28 
29 unsigned int ParseSGroupIntField(bool &ok, bool strictParsing,
30  const std::string &text, unsigned int line,
31  unsigned int &pos,
32  bool isFieldCounter = false);
33 
34 double ParseSGroupDoubleField(const std::string &text, unsigned int line,
35  unsigned int &pos);
36 
37 double ParseSGroupDoubleField(bool &ok, bool strictParsing,
38  const std::string &text, unsigned int line,
39  unsigned int &pos);
40 
42  unsigned int line);
43 
44 template <class Exc = FileParseException>
45 void SGroupWarnOrThrow(bool strictParsing, const std::string &msg) {
46  if (strictParsing) {
47  throw Exc(msg);
48  } else {
49  BOOST_LOG(rdWarningLog) << msg << std::endl;
50  }
51 }
52 
54  const std::string &text, unsigned int line,
55  bool strictParsing = true);
56 
58  const std::string &text, unsigned int line,
59  bool strictParsing = true);
60 
62  const std::string &text, unsigned int line,
63  bool strictParsing = true);
64 
66  const std::string &text, unsigned int line,
67  bool strictParsing = true);
68 
70  const std::string &text, unsigned int line,
71  bool strictParsing = true);
72 
74  const std::string &text, unsigned int line,
75  bool strictParsing = true);
76 
78  const std::string &text, unsigned int line,
79  bool strictParsing = true);
80 
82  const std::string &text, unsigned int line,
83  bool strictParsing = true);
84 
86  const std::string &text, unsigned int line,
87  bool strictParsing = true);
88 
90  const std::string &text, unsigned int line,
91  bool strictParsing = true);
92 
94  const std::string &text, unsigned int line,
95  bool strictParsing = true);
96 
98  IDX_TO_STR_VECT_MAP &dataFieldsMap, RWMol *mol,
99  const std::string &text, unsigned int line,
100  bool strictParsing, unsigned int &counter,
101  unsigned int &lastDataSGroup,
102  std::ostringstream &currentDataField);
103 
105  const std::string &text, unsigned int line,
106  bool strictParsing = true);
107 
109  const std::string &text, unsigned int line,
110  bool strictParsing = true);
111 
112 //! if the SAP line is malformed and has no lvIdx and no id,
113 //! lvIdx is set to mol->getNumAtoms() and id is set to " "
114 //! the user is responsible for replacing lvIdx with the correct
115 //! index: if d_bonds.size() == 1, and one of the bond atom indices
116 //! is aIdx, the other can be safely assigned to lvIdx
118  const std::string &text, unsigned int line,
119  bool strictParsing = true);
120 
122  const std::string &text, unsigned int line,
123  bool strictParsing = true);
124 
126  const std::string &text, unsigned int line,
127  bool strictParsing = true);
128 
129 /* ------------------ V3000 Utils ------------------ */
130 
131 template <class T>
133  std::stringstream &stream, int maxV = -1, bool strictParsing = false);
134 #if defined(_MSC_VER) && defined(RDKIT_DYN_LINK)
135 template RDKIT_FILEPARSERS_EXPORT std::vector<int> ParseV3000Array(
136  std::stringstream &, int, bool);
137 template RDKIT_FILEPARSERS_EXPORT std::vector<unsigned int> ParseV3000Array(
138  std::stringstream &, int, bool);
139 #endif
140 template <class T>
141 std::vector<T> ParseV3000Array(const std::string &s, int maxV = -1,
142  bool strictParsing = false) {
143  std::stringstream stream(s);
144  return ParseV3000Array<T>(stream, maxV, strictParsing);
145 }
146 
148  std::stringstream &stream, unsigned int line,
149  bool strictParsing = true);
150 
152  std::stringstream &stream, bool strictParsing = true);
153 
154 std::string ParseV3000StringPropLabel(std::stringstream &stream);
155 
156 // returns the last line read in the SGroups block
157 std::string ParseV3000SGroupsBlock(std::istream *inStream, unsigned int line,
158  unsigned int nSgroups, RWMol *mol,
159  bool strictParsing);
160 
161 } // namespace SGroupParsing
162 } // namespace RDKit
#define BOOST_LOG(__arg__)
Definition: RDLog.h:92
RDKIT_RDGENERAL_EXPORT RDLogger rdWarningLog
Defines the SubstanceGroup class.
RWMol is a molecule class that is intended to be edited.
Definition: RWMol.h:32
The class for representing SubstanceGroups.
#define RDKIT_FILEPARSERS_EXPORT
Definition: export.h:153
unsigned int ParseSGroupIntField(const std::string &text, unsigned int line, unsigned int &pos, bool isFieldCounter=false)
std::map< int, SubstanceGroup > IDX_TO_SGROUP_MAP
void ParseSGroupV2000STYLine(IDX_TO_SGROUP_MAP &sGroupMap, RWMol *mol, const std::string &text, unsigned int line, bool strictParsing=true)
void ParseSGroupV2000SCDSEDLine(IDX_TO_SGROUP_MAP &sGroupMap, IDX_TO_STR_VECT_MAP &dataFieldsMap, RWMol *mol, const std::string &text, unsigned int line, bool strictParsing, unsigned int &counter, unsigned int &lastDataSGroup, std::ostringstream &currentDataField)
SubstanceGroup * FindSgIdx(IDX_TO_SGROUP_MAP &sGroupMap, int sgIdx, unsigned int line)
void ParseSGroupV2000SPLLine(IDX_TO_SGROUP_MAP &sGroupMap, RWMol *mol, const std::string &text, unsigned int line, bool strictParsing=true)
void ParseSGroupV2000SAPLine(IDX_TO_SGROUP_MAP &sGroupMap, RWMol *mol, const std::string &text, unsigned int line, bool strictParsing=true)
void ParseV3000CStateLabel(RWMol *mol, SubstanceGroup &sgroup, std::stringstream &stream, unsigned int line, bool strictParsing=true)
void ParseSGroupV2000SCNLine(IDX_TO_SGROUP_MAP &sGroupMap, RWMol *mol, const std::string &text, unsigned int line, bool strictParsing=true)
void ParseSGroupV2000SLBLine(IDX_TO_SGROUP_MAP &sGroupMap, RWMol *mol, const std::string &text, unsigned int line, bool strictParsing=true)
void ParseV3000SAPLabel(RWMol *mol, SubstanceGroup &sgroup, std::stringstream &stream, bool strictParsing=true)
void ParseSGroupV2000SDSLine(IDX_TO_SGROUP_MAP &sGroupMap, RWMol *mol, const std::string &text, unsigned int line, bool strictParsing=true)
std::string ParseV3000SGroupsBlock(std::istream *inStream, unsigned int line, unsigned int nSgroups, RWMol *mol, bool strictParsing)
void ParseSGroupV2000SCLLine(IDX_TO_SGROUP_MAP &sGroupMap, RWMol *mol, const std::string &text, unsigned int line, bool strictParsing=true)
void ParseSGroupV2000SSTLine(IDX_TO_SGROUP_MAP &sGroupMap, RWMol *mol, const std::string &text, unsigned int line, bool strictParsing=true)
void ParseSGroupV2000SDILine(IDX_TO_SGROUP_MAP &sGroupMap, RWMol *mol, const std::string &text, unsigned int line, bool strictParsing=true)
void ParseSGroupV2000SBTLine(IDX_TO_SGROUP_MAP &sGroupMap, RWMol *mol, const std::string &text, unsigned int line, bool strictParsing=true)
void SGroupWarnOrThrow(bool strictParsing, const std::string &msg)
std::string ParseV3000StringPropLabel(std::stringstream &stream)
RDKIT_FILEPARSERS_EXPORT std::vector< T > ParseV3000Array(std::stringstream &stream, int maxV=-1, bool strictParsing=false)
void ParseSGroupV2000VectorDataLine(IDX_TO_SGROUP_MAP &sGroupMap, RWMol *mol, const std::string &text, unsigned int line, bool strictParsing=true)
void ParseSGroupV2000SDTLine(IDX_TO_SGROUP_MAP &sGroupMap, RWMol *mol, const std::string &text, unsigned int line, bool strictParsing=true)
void ParseSGroupV2000SDDLine(IDX_TO_SGROUP_MAP &sGroupMap, RWMol *mol, const std::string &text, unsigned int line, bool strictParsing=true)
std::map< int, STR_VECT > IDX_TO_STR_VECT_MAP
void ParseSGroupV2000SBVLine(IDX_TO_SGROUP_MAP &sGroupMap, RWMol *mol, const std::string &text, unsigned int line, bool strictParsing=true)
void ParseSGroupV2000SNCLine(IDX_TO_SGROUP_MAP &sGroupMap, RWMol *mol, const std::string &text, unsigned int line, bool strictParsing=true)
double ParseSGroupDoubleField(const std::string &text, unsigned int line, unsigned int &pos)
void ParseSGroupV2000SMTLine(IDX_TO_SGROUP_MAP &sGroupMap, RWMol *mol, const std::string &text, unsigned int line, bool strictParsing=true)
Std stuff.
Definition: Abbreviations.h:18