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)
int Size() const
the number of atoms in the embedded system
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
const INT_EATOM_MAP & GetEmbeddedAtoms() const
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.
EmbeddedAtom GetEmbeddedAtom(unsigned int aid) const
std::vector< INT_VECT > VECT_INT_VECT
const RDKit::ROMol * getMol() const
Get the molecule that this embedded fragmetn blongs to.
std::map< int, Point2D > INT_POINT2D_MAP
boost::shared_array< double > DOUBLE_SMART_PTR
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 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)
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'