double Molecule::get_distance_to(Molecule& mol_i) { double shortest_distance = numeric_limits<double>::max(); vector<Atom>::iterator iter; for (iter = atoms.begin(); iter != atoms.end(); ++iter) if (mol_i.get_distance_to(*iter) < shortest_distance) shortest_distance = mol_i.get_distance_to(*iter); return shortest_distance; }
int Ensemble::merge_bonded(Molecule & mol_i, double max_bond_i) { vector<Molecule>::iterator iter; Molecule merged_molecule; vector<Molecule> molecules_to_delete; merged_molecule = mol_i; for (iter = molecules.begin(); iter != molecules.end(); ++iter) { if (mol_i.get_distance_to(*iter) <= max_bond_i) { // Merge the molecules merged_molecule = merged_molecule.get_union(*iter); // We're going to delete these later molecules_to_delete.push_back(*iter); } } for (iter = molecules_to_delete.begin(); iter != molecules_to_delete.end(); ++iter) remove(*iter); // Don't need this 'if' now we're setting merged_molecule = mol_i first. if (merged_molecule.get_num_atoms() > 0) add(merged_molecule); return 0; }