10 #ifndef _RD_EMBEDDED_FRAG_H_ 11 #define _RD_EMBEDDED_FRAG_H_ 17 #include <boost/smart_ptr.hpp> 217 void expandEfrag(
RDKit::INT_LIST &nratms, std::list<EmbeddedFrag> &efrags);
226 void addNonRingAtom(
unsigned int aid,
unsigned int toAid);
243 void mergeNoCommon(
EmbeddedFrag &embObj,
unsigned int toAid,
244 unsigned int nbrAid);
262 void mergeFragsWithComm(std::list<EmbeddedFrag> &efrags);
287 int findNeighbor(
unsigned int aid);
302 INT_EATOM_MAP_I eari;
303 for (eari = d_eatoms.begin(); eari != d_eatoms.end(); eari++) {
304 eari->second.loc += shift;
309 INT_EATOM_MAP_CI posi = d_eatoms.find(aid);
310 if (posi == d_eatoms.end()) {
311 PRECONDITION(0,
"Embedded atom does not contain embedded atom specified");
317 int Size()
const {
return d_eatoms.size(); }
329 void flipAboutBond(
unsigned int bondId,
bool flipEnd =
true);
331 void openAngles(
const double *dmat,
unsigned int aid1,
unsigned int aid2);
333 std::vector<PAIR_I_I> findCollisions(
const double *dmat,
334 bool includeBonds = 1);
336 void computeDistMat(DOUBLE_SMART_PTR &dmat);
338 double mimicDistMatAndDensityCostFunc(
const DOUBLE_SMART_PTR *dmat,
341 void permuteBonds(
unsigned int aid,
unsigned int aid1,
unsigned int aid2);
343 void randomSampleFlipsAndPermutations(
unsigned int nBondsPerSample = 3,
344 unsigned int nSamples = 100,
346 const DOUBLE_SMART_PTR *dmat = 0,
347 double mimicDmatWt = 0.0,
348 bool permuteDeg4Nodes =
false);
352 void removeCollisionsBondFlip();
355 void removeCollisionsOpenAngles();
359 void removeCollisionsShortenBonds();
365 void setupNewNeighs();
368 void updateNewNeighs(
unsigned int aid);
379 void canonicalizeOrientation();
382 double totalDensity();
416 unsigned int aid1,
unsigned int aid2,
425 void mergeRing(
const EmbeddedFrag &embRing,
unsigned int nCommon,
438 void reflectIfNecessaryDensity(
EmbeddedFrag &embFrag,
unsigned int aid1,
456 void reflectIfNecessaryCisTrans(
EmbeddedFrag &embFrag,
unsigned int ctCase,
457 unsigned int aid1,
unsigned int aid2);
468 void reflectIfNecessaryThirdPt(
EmbeddedFrag &embFrag,
unsigned int aid1,
469 unsigned int aid2,
unsigned int aid3);
494 void addAtomToAtomWithAng(
unsigned int aid,
unsigned int toAid);
510 void addAtomToAtomWithNoAng(
538 void computeNbrsAndAng(
unsigned int aid,
const RDKit::INT_VECT &doneNbrs);
543 double d_px, d_nx, d_py, d_ny;
547 INT_EATOM_MAP d_eatoms;
std::list< int > INT_LIST
EmbeddedAtom & operator=(const EmbeddedAtom &other)
const RDKit::ROMol * getMol() const
Get the molecule that this embedded fragmetn blongs to.
EmbeddedAtom(unsigned int aid, const RDGeom::Point2D &pos)
RDGeom::Point2D normal
a zig-zag manner
double angle
the angle that is already takes at this atom, so any new atom attaching to
void Transform(const RDGeom::Transform2D &trans)
void Translate(const RDGeom::Point2D &shift)
ROMol is a molecule class that is intended to have a fixed topology.
std::vector< INT_VECT > VECT_INT_VECT
std::map< int, Point2D > INT_POINT2D_MAP
boost::shared_array< double > DOUBLE_SMART_PTR
const INT_EATOM_MAP & GetEmbeddedAtoms() const
std::vector< int > INT_VECT
Class containing a fragment of a molecule that has already been embedded.
Class that contains the data for an atoms that has alredy been embedded.
int Size() const
the number of atoms in the embedded system
int rotDir
useful only on atoms that are degree >= 4
int nbr2
the second neighbor of atom that from the 'angle'
class for representing a bond
std::map< unsigned int, EmbeddedAtom > INT_EATOM_MAP
RDGeom::Point2D reflectPoint(const RDGeom::Point2D &point, const RDGeom::Point2D &loc1, const RDGeom::Point2D &loc2)
EmbeddedFrag()
Default constructor.
INT_EATOM_MAP::const_iterator INT_EATOM_MAP_CI
void Reflect(const RDGeom::Point2D &loc1, const RDGeom::Point2D &loc2)
void markDone()
Mark this fragment to be done for final embedding.
bool isDone()
If this fragment done for the final embedding.
#define PRECONDITION(expr, mess)
EmbeddedAtom GetEmbeddedAtom(unsigned int aid) const
INT_EATOM_MAP::iterator INT_EATOM_MAP_I
RDKit::INT_VECT neighs
and these are the atom IDs of the neighbors that still need to be embedded
int CisTransNbr
is this is a cis/trans atom the neighbor of this atom that is involved in
int nbr1
the first neighbor of this atom that form the 'angle'