|
From: Ethan M. <merritt@u.washington.edu> - 2011-10-04 17:20:10
|
On Tuesday, October 04, 2011 10:03:10 am pl...@pi... wrote: > On 10/04/11 18:22, Ethan Merritt wrote: > > On Tuesday, October 04, 2011 08:43:02 am pl...@pi... wrote: > >> On 10/04/11 17:28, Ethan Merritt wrote: > >>> On Tuesday, 04 October 2011, pl...@pi... wrote: > >>>> Hi, > >>>> > >>>> I have found what appears to be a defect in variable assignments in plot. > >>>> > >>>> gauss0(x)=a0*exp(-(x-pk0)**2/b0)+c0 > >>>> a1=a0;b1=b0;c1=c0;pk0=-141; > >>>> add_one(x)=area0=1; > >>> > >>> This defines the function add_one(x) > >>> to be add_one(x) = value of (area0=1) > >>> = 1 > >>> So add_one(x) = 1 for all x > >> > >> Exactly, so why is area still 0 after having been assigned the value 1 > >> about 512 times?! > > > > Ah. I thought you were asking about the behaviour of add_one(), > > since its name implies that it performs an addition but in fact it > > is defined to always equal 1. I wondered if you didn't simply have > > a typo for "add_one_x = area0 +1". > > Anyhow... > > > >> I reiterate that if I remove the function plot I do get areas=1 after > >> plotting. This indicates that plot is re-executing area0=0 after the > >> second data plot and before plotting the function. > > > > I don't say this is good/bad, expected/unexpected, bug/feature, or simply > > confusing, but this is the way it has always worked. Each plot command > > is evaluated once to detect functions, read in data, and determine plot > > ranges; then it is evaluated again to fill in function values over the > > now-determined range; then it is plotted. If there are no functions then > > the second of those three operations is skipped. > > > > See also > > https://sourceforge.net/tracker/index.php?func=detail&aid=2907028&group_id=2055&atid=102055 > > > > Ethan > > # > Thanks , I can understand that bug report and how your explanation > above accounts for what was reported. However, it does not seem to > explain what I'm seeing. > > Is the order perhaps: > evaluate > plot data > evaluate > plot functions > ? Nope. Code snippetes from plot2d.c /* ** First Pass: Read through data files *** * This pass serves to set the xrange and to parse the command, as well * as filling in every thing except the function data. That is done after * the xrange is defined. */ [...] /*** Second Pass: Evaluate the functions ***/ /* * Everything is defined now, except the function data. We expect * no syntax errors, etc, since the above parsed it all. This * makes the code below simpler. If y is autoscaled, the yrange * may still change. we stored last token of each plot, so we * dont need to do everything again */ [...] if (some_functions) { [...] } /* some_functions */ [...] if (table_mode) { print_table(first_plot, plot_num); } else { /* do_plot now uses axis_array[] */ do_plot(first_plot, plot_num); } -- Ethan A Merritt Biomolecular Structure Center, K-428 Health Sciences Bldg University of Washington, Seattle 98195-7742 |