bool OBBond::IsTertiaryAmide() { OBAtom *c,*n; c = n = NULL; // Look for C-N bond if (_bgn->GetAtomicNum() == 6 && _end->GetAtomicNum() == 7) { c = (OBAtom*)_bgn; n = (OBAtom*)_end; } if (_bgn->GetAtomicNum() == 7 && _end->GetAtomicNum() == 6) { c = (OBAtom*)_end; n = (OBAtom*)_bgn; } if (!c || !n) return(false); if (GetBondOrder() != 1) return(false); if (n->GetImplicitValence() != 3) return(false); // Make sure that N is connected to three non-H atoms if (n->GetHvyValence() != 3) return(false); // Make sure C is attached to =O OBBond *bond; vector<OBBond*>::iterator i; for (bond = c->BeginBond(i); bond; bond = c->NextBond(i)) { if (bond->IsCarbonyl()) return(true); } return(false); }
bool OBBond::IsAmidine() { OBAtom *c,*n; c = n = NULL; // Look for C-N bond if (_bgn->GetAtomicNum() == 6 && _end->GetAtomicNum() == 7) { c = (OBAtom*)_bgn; n = (OBAtom*)_end; } if (_bgn->GetAtomicNum() == 7 && _end->GetAtomicNum() == 6) { c = (OBAtom*)_end; n = (OBAtom*)_bgn; } if (!c || !n) return(false); if (GetBondOrder() != 1) return(false); if (n->GetImplicitValence() != 3) return(false); // Make sure C is attached to =N OBBond *bond; vector<OBBond*>::iterator i; for (bond = c->BeginBond(i); bond; bond = c->NextBond(i)) { if (bond->IsImide()) return(true); } // Return return(false); }
bool OBBond::IsSecondaryAmide() { OBAtom *c,*n; c = n = NULL; // Look for C-N bond if (_bgn->GetAtomicNum() == 6 && _end->GetAtomicNum() == 7) { c = (OBAtom*)_bgn; n = (OBAtom*)_end; } if (_bgn->GetAtomicNum() == 7 && _end->GetAtomicNum() == 6) { c = (OBAtom*)_end; n = (OBAtom*)_bgn; } if (!c || !n) return(false); if (GetBondOrder() != 1) return(false); if (TotalNumberOfBonds(n) != 3) return false; // must be a degree 3 nitrogen // Make sure that N is connected to two non-H atoms if (n->GetHvyValence() != 2) return(false); // Make sure C is attached to =O OBBond *bond; vector<OBBond*>::iterator i; for (bond = c->BeginBond(i); bond; bond = c->NextBond(i)) { if (bond->IsCarbonyl()) return(true); } return(false); }