From: William Ray (ray.29_at_osu.edu)
Date: Fri Oct 05 2012 - 12:41:42 CDT

End-of-action report:

Got a linux box reconfigured for testing, and I've validated that both of my guessed-at code bugs are in fact actual bugs.

In Molecule.C :

persistent_force_vectors.remove(3*ind );
persistent_force_vectors.remove(3*ind+1);
persistent_force_vectors.remove(3*ind+2);

should be

persistent_force_vectors.remove(3*ind);
persistent_force_vectors.remove(3*ind);
persistent_force_vectors.remove(3*ind);

Validation : load deca-alanine, set the mouse to atom forces, launch auto-imd, and add 4 or so forces on random atoms. Delete the first force you added. The magnitudes and orientations of some of the other forces will change. Modify the code as recommended and repeat. remaining forces will remain consistent with their original specification.

In Molecule.C :

zero_force_indices.append(force_indices[j]);

should be

zero_force_indices.append(last_force_indices[ii]);

Validation : load 10ala, set the mouse to residue forces, launch IMD and set a force on the terminal residue. Wait for the chain to become fully extended. Right-click to remove the force on the terminal residue. The chain will recoil /just a tiny amount/ but will remain stretched as though a force still existed on the terminal residue (though none is shown). Change code as recommended. Repeat. When force is removed, now chain properly rebounds from stretched state, and eventually regains folded structure.

If you folks could incorporate these fixes and build a new Mac version, I'd really appreciate it. So far I can get a clean-ish compile on Lion on the Mac, but it seg-faults when attempting to connect to an IMD/autoIMD session. Almost certainly a plugin issue, but I'm betting I have some 32/64-bit confusion due to legacy cruft laying around my system, and it could take me quite a while to sort this out.

Thanks much,
Will Ray

On Sep 30, 2012, at 5:50 PM, John Stone wrote:

>
> William,
> I'm a bit swamped working on something else currently, but I will
> make time to look at this next week after I get past a couple of deadlines.
>
> Cheers,
> John Stone
> vmd_at_ks.uiuc.edu
>
> On Thu, Sep 27, 2012 at 04:13:03PM -0400, William Ray wrote:
>>
>>
>> And, I think I might have it?
>>
>> Molecule.C : get_new_frames()
>>
>> Where it's trying to decide if there were forces applied in the previous timestep that need to be cancelled in this one:
>>
>>
>>
>> for(ii=0; ii<last_force_indices.num(); ii++) {
>> int j;
>> int index_missing=1;
>> for (j=0; j<force_indices.num(); j++) {
>> if (force_indices[j]==last_force_indices[ii]) {
>> index_missing=0;
>> break;
>> }
>> }
>> if (index_missing) {
>> // this one didn't show up this time
>> zero_force_indices.append(force_indices[j]);
>> zero_forces.append(0);
>> zero_forces.append(0);
>> zero_forces.append(0);
>> }
>> }
>>
>>
>>
>> I'm pretty sure that
>>
>> zero_force_indices.append(force_indices[j]);
>>
>> should actually be
>>
>> zero_force_indices.append(last_force_indices[ii]);
>>
>>
>> If I understand correctly, the intent is to accumulate appropriate last_force_indices when they're not present in the current force_indices array.
>>
>> If you have multiple forces being deleted however, the current code will append the same current (force_indices[j]) index to the zero_force_indices array, for every now-missing force.
>>
>> It's possible this works with a single atom selection, because both indices are serendipitously zero?
>>
>>
>>
>> ... wish I could make this compile! I feel like a complete dolt trying to debug from the source alone.
>>
>>
>>
>>
>
> --
> NIH Resource for Macromolecular Modeling and Bioinformatics
> Beckman Institute for Advanced Science and Technology
> University of Illinois, 405 N. Mathews Ave, Urbana, IL 61801
> http://www.ks.uiuc.edu/~johns/ Phone: 217-244-3349
> http://www.ks.uiuc.edu/Research/vmd/ Fax: 217-244-6078
>
>