mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-03 21:44:30 +08:00
* basic approach to v2api * does not work, backup commit * well, that now compiles * cleaner * more cleanup and testing * get the SWIG wrappers to build * swig wrappers now build * switch back to using references to default values * adjust to new catch version * move the implementation to v2 and call it from v1 * update the parameter object too * move debugParse down * a couple of review changes * make v2 naming consistent with Python * first pass at v2 for the ctab parsers * move a the writing functionality to a different header this is just an organizational thing at the moment; we still import the writers header in the parsers header so as to not break code * do v2 of the tpl parser * fix missing dependency * Mol2 parser * move over the XYZ parser * switch over the PDB parsers too * get mac and java builds working (hopefully) * add v2 API for the reaction parsers Fixes #7075 * v2 of the fileparser API about done This cannot be completed until the CDXML changes are merged
87 lines
2.9 KiB
C++
87 lines
2.9 KiB
C++
//
|
|
// Copyright (c) 2020 Greg Landrum
|
|
//
|
|
// @@ All Rights Reserved @@
|
|
// This file is part of the RDKit.
|
|
// The contents are covered by the terms of the BSD license
|
|
// which is included in the file license.txt, found at the root
|
|
// of the RDKit source tree.
|
|
//
|
|
|
|
#include <GraphMol/ChemReactions/Reaction.h>
|
|
#include <GraphMol/ChemReactions/ReactionPickler.h>
|
|
#include <GraphMol/ChemReactions/ReactionParser.h>
|
|
#include <GraphMol/FileParsers/PNGParser.h>
|
|
#include <boost/algorithm/string.hpp>
|
|
|
|
namespace RDKit {
|
|
|
|
namespace PNGData {
|
|
const std::string rxnSmilesTag = "ReactionSmiles";
|
|
const std::string rxnSmartsTag = "ReactionSmarts";
|
|
const std::string rxnRxnTag = "ReactionRxn";
|
|
const std::string rxnPklTag = "rdkitReactionPKL";
|
|
} // namespace PNGData
|
|
|
|
std::string addChemicalReactionToPNGStream(const ChemicalReaction &rxn,
|
|
std::istream &iStream,
|
|
bool includePkl, bool includeSmiles,
|
|
bool includeSmarts,
|
|
bool includeRxn) {
|
|
std::vector<std::pair<std::string, std::string>> metadata;
|
|
if (includePkl) {
|
|
std::string pkl;
|
|
ReactionPickler::pickleReaction(rxn, pkl);
|
|
metadata.push_back(std::make_pair(augmentTagName(PNGData::rxnPklTag), pkl));
|
|
}
|
|
if (includeSmiles) {
|
|
std::string smi = ChemicalReactionToRxnSmiles(rxn);
|
|
metadata.push_back(
|
|
std::make_pair(augmentTagName(PNGData::rxnSmilesTag), smi));
|
|
}
|
|
if (includeSmarts) {
|
|
std::string smi = ChemicalReactionToRxnSmarts(rxn);
|
|
metadata.push_back(
|
|
std::make_pair(augmentTagName(PNGData::rxnSmartsTag), smi));
|
|
}
|
|
if (includeRxn) {
|
|
std::string mb = ChemicalReactionToRxnBlock(rxn);
|
|
metadata.push_back(std::make_pair(augmentTagName(PNGData::rxnRxnTag), mb));
|
|
}
|
|
return addMetadataToPNGStream(iStream, metadata);
|
|
};
|
|
|
|
namespace v2 {
|
|
namespace ReactionParser {
|
|
std::unique_ptr<ChemicalReaction> ReactionFromPNGStream(
|
|
std::istream &inStream) {
|
|
std::unique_ptr<ChemicalReaction> res;
|
|
auto metadata = PNGStreamToMetadata(inStream);
|
|
bool formatFound = false;
|
|
for (const auto &pr : metadata) {
|
|
if (boost::starts_with(pr.first, PNGData::rxnPklTag)) {
|
|
res.reset(new ChemicalReaction(pr.second));
|
|
formatFound = true;
|
|
} else if (boost::starts_with(pr.first, PNGData::rxnSmilesTag)) {
|
|
ReactionFromSmiles(pr.second).swap(res);
|
|
formatFound = true;
|
|
} else if (boost::starts_with(pr.first, PNGData::rxnSmartsTag)) {
|
|
ReactionFromSmarts(pr.second).swap(res);
|
|
formatFound = true;
|
|
} else if (boost::starts_with(pr.first, PNGData::rxnRxnTag)) {
|
|
ReactionFromRxnBlock(pr.second).swap(res);
|
|
formatFound = true;
|
|
}
|
|
if (formatFound) {
|
|
break;
|
|
}
|
|
}
|
|
if (!formatFound) {
|
|
throw FileParseException("No suitable metadata found.");
|
|
}
|
|
return res;
|
|
}
|
|
} // namespace ReactionParser
|
|
} // namespace v2
|
|
} // namespace RDKit
|