Subject: [mg103753] How to find which variable caused the trigger in Manipulate[] ?

From: "Nasser Abbasi" <nma at 12000.org>

Date: Mon, 5 Oct 2009 07:36:57 -0400 (EDT)

Reply-to: "Nasser Abbasi" <nma at 12000.org>

Hello,
Version 7.
Manipulate[] works by evaluating an expression each time any one of its
control variables has changed.
I have an example, where the expression involves 2 plots and 2 control
variables, like this:
Manipulate[
Grid[{
{Plot[Sin[a*x], {x, -Pi, Pi}],
Plot[Sin[b*x], {x, -Pi, Pi}]}}
],
{a, 0, 1}, {b, 0, 1},
TrackedSymbols -> {a, b}
]
So, in the above, each time 'a' or 'b' is changed, BOTH plots are called
since they are ofcourse part of the expression, even though only one of them
will actually change from earlier time. This can be waste of time.
I'd like to ask Mathematica to tell me which variable trigged the
revaluation of the Manipulate expression.
i.e., I really would like to do _something_ like the following. First
suppose there is a function way W[] which returns the name of the variable
which caused the trigger, then I'd write
Which[ W[] == "a", Plot[Sin[a*x], {x, -Pi, Pi}],
W[] == "b", Plot[Sin[b*x], {x, -Pi, Pi}]
]
The reason I am asking, is that I have a manipulate with 10 plots all on one
display, and I do not want to plot each of them each time when only one plot
is actually changing.
Currently I solve this problem by having a RadioButton[] next to each plot.
When the radioButton[] is clicked, then I check which RadioButton is TRUE
out of the 10 radioButtons, then this tells me which plot needs to be
replotted.
If I can find which variable did the triggering, I can get rid of the radio
buttons and simplify the interface.
Thank you,
--Nasser
ps. I did read the docs from the documentation center on dynamics and
Manipulate (they are good), but do not see the solution there.
__________ Information from ESET NOD32 Antivirus, version of virus signature database 4479 (20091004) __________
The message was checked by ESET NOD32 Antivirus.
http://www.eset.com