Example #1
0
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;

}
Example #2
0
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;

}