From: yjcoshc (yjcoshc_at_gmail.com)
Date: Fri Mar 08 2019 - 19:41:00 CST
Dear NAMD and Colvars developers,
I am trying to implement a collective variable (CV) through the C++
interface of Colvars. This CV should accept multiple reference frames
and compute the minimal RMSDs of the current atomic coordinates with
respect of them. In the class of new CV I have tried to add a vector
like "std::vector<cvm::atom_group*> comp_atoms" and then parsed the
selected atoms in the constructor like this loop:
for (size_t i_frame = 0; i_frame < reference_frames.size();
++i_frame) {
cvm::atom_group* tmp_atoms = parse_group(conf, "atoms");
// Swipe from the rmsd class
tmp_atoms->b_center = true;
tmp_atoms->b_rotate = true;
tmp_atoms->ref_pos = reference_frames[i_frame];
tmp_atoms->center_ref_pos();
tmp_atoms->disable(f_ag_fit_gradients);
tmp_atoms->rot.request_group1_gradients(tmp_atoms->size());
tmp_atoms->rot.request_group2_gradients(tmp_atoms->size());
comp_atoms.push_back(tmp_atoms);
}
However this doesn't work, and the colvars ends up with throwing an
exception of "std::out_of_range" in "basic_string::erase" after the
constructor finishes.
Is there a standard way to compute multiple minimal RMSDs in the C++
interface?
Thanks,
Haochuan Chen
This archive was generated by hypermail 2.1.6 : Thu Dec 31 2020 - 23:17:10 CST