mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-04 21:54:27 +08:00
* Allow creation of Enhanced Stereo groups from Python This wraps creation of Enhanced Stereo groups from Python. It also allows setting enhanced stereo groups on an RWMol from Python. Additionally, this provides a little function to allow C++ vectors to be wrapped for Python, but allow Python list objects or wrapped C++ vectors to be used as arguments to functions that take vectors as inputs. I added it only to Wrap/StereoGroup.cpp, but I _think_ that I should add this logic to RegisterVectorConverter in RDBoost/Wrap.h. If I did that, I'd be able to remove a couple of lines in Wrap/Mol.cpp * enforce atom ownership in SGroups Some cleanups to make sure you can't add an S group with bogus atoms to a molecule * Remove constructor for StereoGroup. I tried very hard to convince boost Python to allow me to use with_custodian_and_ward_postcall on an init, and it just never worked. I've removed the constructor - folks will need to use the factory function "CreateStereoGroup" if they want a StereoGroup.
70 lines
2.0 KiB
C++
70 lines
2.0 KiB
C++
//
|
|
// Copyright (C) 2018 T5 Informatics GmbH
|
|
//
|
|
// @@ 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.
|
|
//
|
|
/*! \file StereoGroup.h
|
|
|
|
\brief Defines the class StereoGroup which stores relationships between
|
|
the absolute configurations of atoms within a structure.
|
|
|
|
*/
|
|
|
|
#include <RDGeneral/export.h>
|
|
#ifndef RD_StereoGroup_092018
|
|
#define RD_StereoGroup_092018
|
|
|
|
#include <vector>
|
|
|
|
namespace RDKit {
|
|
class Atom;
|
|
|
|
// OR means that it is known to be one or the other, but not both
|
|
// AND means that it is known to be a mix.
|
|
enum class StereoGroupType {
|
|
STEREO_ABSOLUTE = 0,
|
|
STEREO_OR = 1,
|
|
STEREO_AND = 2
|
|
};
|
|
|
|
//! StereoGroup is a collection of atoms with a known stereochemical
|
|
//! relationship
|
|
/*!
|
|
Used to help represent a sample with unknown stereochemistry, or that is a mix
|
|
of diastereomers.
|
|
|
|
*/
|
|
class RDKIT_GRAPHMOL_EXPORT StereoGroup {
|
|
private:
|
|
StereoGroupType d_grouptype;
|
|
std::vector<Atom*> d_atoms;
|
|
|
|
public:
|
|
StereoGroup() : d_grouptype(StereoGroupType::STEREO_ABSOLUTE), d_atoms(0u){};
|
|
// Takes control of atoms if possible.
|
|
StereoGroup(StereoGroupType grouptype, std::vector<Atom*>&& atoms);
|
|
StereoGroup(StereoGroupType grouptype, const std::vector<Atom*>& atoms);
|
|
StereoGroupType getGroupType() const;
|
|
const std::vector<Atom*>& getAtoms() const;
|
|
// Seems odd to have to define these, but otherwise the SWIG wrappers
|
|
// won't build
|
|
bool operator==(const StereoGroup& other) const {
|
|
return (d_grouptype == other.d_grouptype) && (d_atoms == other.d_atoms);
|
|
};
|
|
bool operator!=(const StereoGroup& other) const {
|
|
return (d_grouptype != other.d_grouptype) || (d_atoms != other.d_atoms);
|
|
};
|
|
};
|
|
RDKIT_GRAPHMOL_EXPORT void removeGroupsWithAtom(
|
|
const Atom* atom, std::vector<StereoGroup>& groups);
|
|
RDKIT_GRAPHMOL_EXPORT void removeGroupsWithAtoms(
|
|
const std::vector<Atom*>& atoms, std::vector<StereoGroup>& groups);
|
|
|
|
} // namespace RDKit
|
|
|
|
#endif
|