VirtualPhotonics / Vts.Gui.Wpf

WPF Application using the Vts library
Other
3 stars 0 forks source link

Normalizing the plots using the Curve toggle in the complex solution domain #16

Open hayakawa16 opened 6 years ago

hayakawa16 commented 6 years ago

On the Forward Solver panel, the plot toggle "Curve" is suppose to divide all plots by the results of the first plot. When plotting complex results for two sets of optical properties, the "Curve" results may not be informative.
a) Currently for the real/imag plots, the "Curve" selection normalizes all plots using the first real plot. So plot 1 would have plots real1 and imag1 and plot 2 would have real2 imag2, and "Curve" plots real1/real1, imag1/real1, real2/real1, imag2/real1. b) Currently for phase plots, the Curve normalization is doing something funny. It is not dividing all plots by the first phase plot because the result shows two curved plots. I think it might be taking the real and imag Curve data (described above) and plotting phase.
c) Currently for the amp plots, the Curve normalization is again showing curved plots so the plots are not being normalized by the first Amp plot. Most likely the norm is using the real and imag Curve data in a).

a)-c) do not provide informative information.

All of these can be easily seen with the data R(rho,ft), with rho=10mm, ft=0 to 1 with 51 number and with mua=0.01 and mus'=1 and then 1.5.

janakarana commented 6 years ago

Using a real component to do normalization in the complex domain does not make any sense. It only represents a part of the complex number.

The question is what do we want to normalize? If we want to normalize the amplitude plots, we have to use the first amplitude plot. If we want to normalize the phase plots, we have to use the first phase plot. When it comes to real and imaginary components, we have to follow the same concept. The real plots have to be normalized by the first real plot and the imaginary plots have to be normalized by the first imaginary plot.

Suggestion: To avoid some confusion, the 'Complex' button can be split into two buttons; real and imaginary

dcuccia commented 6 years ago

The Curve normalization is "dumb" in that it normalizes by the first plot's (scalar) values, and is really only useful for a small number of things. If you first plotted amplitude, then complex, does the curve norm do the "right" thing? I'd support Janaka's suggestion above, in that it forces the user to think explicitly about what you're plotting, but I do recall that we have some specialized Enumerable.Zip code in there currently that handles the pair of values as a special case, which would need to be removed/revised if real/imag were separated.

hayakawa16 commented 6 years ago

I just pushed a fix for the "Max" and "Curve" selections when the Plot is complex. : For the Max selection: 1) Amplitude/Phase, plot max relative to each amplitude/phase plot so all max values are 1, 2) real/imag, plot max for real relative to real plots and imag relative to imag plots. For the Curve selection: 1) Amplitude/Phase, plot plots greater than first, divided by the first amplitude/phase plot, 2) real/imag, plot real plots greater than first divided by first real plot, plot imag plots greater than first divided by first imag plot. I did not add any additional plot buttons for this fix.

Please give it a try and let me know what you think. Note that if the Max value is 0 or if any of the first plot's y-axis values are 0, division by 0 will occur and no data point will be plotted.