lua functions for wiggle and shake should allow timed wiggles
Case number: | 845813-987798 |
Topic: | Game: Tools |
Opened by: | Tlaloc |
Status: | Open |
Type: | Suggestion |
Opened on: | Thursday, June 3, 2010 - 09:56 |
Last modified: | Monday, June 28, 2010 - 06:53 |
If you look at the descriptions of particular moves in the wiki, frequently they say things like "wiggle backbone for about 2 seconds, then stop." There is no way to implement that in a script. I want to wiggle a little, but not until the structure completely changes.
There is the issue that this can mean different things on different speed machines, so seconds might not be the right unit to use, but some standard time unit that takes machine speed into account.
A global threshold value for shake/wiggle, as I suggested here, could help.
http://fold.it/portal/node/987729.
Soetimes, Shake and Wiggle DO some changes, but only in a non-GUI-visible amount (fewer than 0.001 points),so it would be nice to stop those actions by the "game engine" itself, if they do changes under this amount (absolute value)... if needed.
So, you could use for example a wiggle(1), but with a smaller threshold to have smaller steps.
My issue with iterations is that it can run for 2 seconds when there isn't much to do or for minutes while mangling the protein. I'd like to see the wiggle time be more predictable than currently availalbe with iteration count.
Then, using a high difference threshold value could help.
I'm rather for a case-sensitive than a time-sensitive solution,
as there are different systems with different performances, and computers get faster each day.
I have given this some more thought. I think rather than timed, I want two additional parameters on the wiggle and shake functions, a low and high score. So, for example, do_global_wiggle_backbone(1,10,3) would do a wiggle for one iteration. If the score dropped by more than 10 points, or went up by more than 3 points, it would stop and return, otherwise it plays out the original do_global_wiggle_backbone(1) functionality. Either of the last two parameters could be nil, so do_global_wiggle_backbone(1, 10, nil) would stop if it drops by more than 10 points, but would not stop as long as it goes up. This means that this could be implemented without breaking any existing scripts, since parameters default to nil.
I think this accomplishes what I want. The goal is to get it to change the structure, but not by too much. We can rate the change by the change in score.
Right, this would help, as often even an iteration value of 1 does (too) much changes.
If it were done like Tlaloc submitted, also this would be solved indirectly:
http://fold.it/portal/node/986577
If it is easier to implement for all tools, Tlaloc's idea could be realized as global behaviour parameter:
set_behaviour_max_change_pos(x) for maximum positive change
set_behaviour_max_change_neg(x) for maximum negative change
Then,I would also wish to include
set_behaviour_min_change_pos(x) for minimum positive change
set_behaviour_min_change_neg(x) for minimum negative change,
as some stragetgies say "Do [tool] until no change", respecting that some tools (like wiggle backbone or wiggle sidechains especially) do changes, but only on very low scales sometimes.
As far as I know the currently used "iterations" unit is already independent from processor speed and size of the protein. The problem is that the minimum number of iterations, one, is sometimes already too much.