void setReactantBondPropertiesToProduct(RWMOL_SPTR product, const ROMol &reactant, ReactantProductAtomMapping *mapping) { ROMol::BOND_ITER_PAIR bondItP = product->getEdges(); while (bondItP.first != bondItP.second) { Bond *pBond = (*product)[*(bondItP.first)]; ++bondItP.first; if (pBond->hasProp(common_properties::NullBond) || pBond->hasProp(common_properties::_MolFileBondQuery)) { if (mapping->prodReactAtomMap.find(pBond->getBeginAtomIdx()) != mapping->prodReactAtomMap.end() && mapping->prodReactAtomMap.find(pBond->getEndAtomIdx()) != mapping->prodReactAtomMap.end()) { // the bond is between two mapped atoms from this reactant: unsigned begIdx = mapping->prodReactAtomMap[pBond->getBeginAtomIdx()]; unsigned endIdx = mapping->prodReactAtomMap[pBond->getEndAtomIdx()]; const Bond *rBond = reactant.getBondBetweenAtoms(begIdx, endIdx); if (!rBond) continue; pBond->setBondType(rBond->getBondType()); pBond->setBondDir(rBond->getBondDir()); pBond->setIsAromatic(rBond->getIsAromatic()); if (pBond->hasProp(common_properties::NullBond)) { pBond->clearProp(common_properties::NullBond); } } } } }