void Selection::printInfo(FILE *fp) const { fprintf(fp, "\"%s\" (%d position%s, %d atom%s%s)", name(), posCount(), posCount() == 1 ? "" : "s", atomCount(), atomCount() == 1 ? "" : "s", isDynamic() ? ", dynamic" : ""); fprintf(fp, "\n"); }
/// Returns a list of all the bonds in the residue. std::vector<Bond *> Residue::bonds() const { std::vector<Bond *> bonds; for(size_t i = 0; i < atomCount(); i++){ for(size_t j = i + 1; j < atomCount(); j++){ Bond *bond = d->atoms[i]->bondTo(d->atoms[j]); if(bond){ bonds.push_back(bond); } } } return bonds; }
Molecule::AtomType Molecule::addAtom(unsigned char number, Index uniqueId) { if (uniqueId >= static_cast<Index>(m_atomUniqueIds.size()) || m_atomUniqueIds[uniqueId] != MaxIndex) { return AtomType(); } m_atomUniqueIds[uniqueId] = atomCount(); AtomType a = Core::Molecule::addAtom(number); return a; }
bool Molecule::removeAtom(Index index) { if (index >= atomCount()) return false; Index uniqueId = findAtomUniqueId(index); if (uniqueId == MaxIndex) return false; // Unique ID of an atom that was removed: m_atomUniqueIds[uniqueId] = MaxIndex; // Before removing the atom we must first remove any bonds to it. Core::Array<BondType> atomBonds = Core::Molecule::bonds(atom(index)); while (atomBonds.size()) { removeBond(atomBonds.back()); atomBonds = Core::Molecule::bonds(atom(index)); } Index newSize = static_cast<Index>(m_atomicNumbers.size() - 1); if (index != newSize) { // We need to move the last atom to this position, and update its unique ID. m_atomicNumbers[index] = m_atomicNumbers.back(); if (m_positions2d.size() == m_atomicNumbers.size()) m_positions2d[index] = m_positions2d.back(); if (m_positions3d.size() == m_atomicNumbers.size()) m_positions3d[index] = m_positions3d.back(); // Find any bonds to the moved atom and update their index. atomBonds = Core::Molecule::bonds(atom(newSize)); foreach (const BondType& currentBond, atomBonds) { std::pair<Index, Index> pair = m_bondPairs[currentBond.index()]; if (pair.first == newSize) pair.first = index; else if (pair.second == newSize) pair.second = index; m_bondPairs[currentBond.index()] = pair; }
Molecule::AtomType Molecule::addAtom(unsigned char number) { m_atomUniqueIds.push_back(atomCount()); AtomType a = Core::Molecule::addAtom(number); return a; }
// --- Properties ---------------------------------------------------------- // /// Returns the number of atoms in the moiety. int Moiety::size() const { return atomCount(); }