queries/bestfitline.py# ----------------------------------------------------------------------------
# CLASSES: nightly
#
# Test Case: bestfit.py
#
# Tests: queries - "Best Fit Line"
# expressions - distance_to_best_fit_line
#
# Defect ID: none
#
# Programmer: Brad Whitlock
# Date: Fri Nov 18 16:43:42 PST 2005
#
# Modifications:
#
# Mark C. Miller, Tue Mar 14 07:54:20 PST 2006
# Changed how full-frame is turned on
#
# Mark C. Miller, Wed Jan 20 07:37:11 PST 2010
# Added ability to swtich between Silo's HDF5 and PDB data.
#
# Matt Larsen Wed May 09 08:31:00 PST 2018
# Adding view reset so image actual shows a line
# ----------------------------------------------------------------------------
import math
def writeDataSet():
nts = 100
nsamples = 100
x0 = -5.
y0 = -5.
x1 = 5.
y1 = 5.
names = []
coefficients = []
for i in range(nts):
t = float(i) / float(nts - 1)
y_left = t * y1 + (1. - t) * y0
y_right = t * y0 + (1. - t) * y1
filename = data_path("curve_test_data/line%04d.curve") % i
names = names + [filename]
try:
f = open(filename, "w")
f.write("#TIME %g\n" % t)
f.write("#line\n")
m = (y_right - y_left) / (x1 - x0)
angle = t * 3.14159 * 2.
b = math.sin(angle)
#print "Y = %gX + %g" % (m, b)
coefficients = coefficients + [(m, b)]
for j in range(nsamples):
t2 = float(j) / float(nsamples - 1)
x = t2 * x1 + (1. - t2) * x0
y = t2 * y_right + (1. - t2) * y_left + b
f.write("%g %g\n" % (x, y))
f.close()
except:
break
return (names, coefficients)
def removeFiles(ds):
for d in ds:
try:
os.unlink(d)
except:
print("Could not remove ", d)
#
# Test best fit line of known lines from Curve plots
#
def test1():
data = writeDataSet()
filenames = data[0]
coefficients = data[1]
OpenDatabase(data_path("curve_test_data/line*.curve database"))
AddPlot("Curve", "line")
DrawPlots()
s = ""
try:
for state in range(0, len(coefficients), 2):
SetTimeSliderState(state)
Query("Best Fit Line")
values = GetQueryOutputValue()
s = s + "Original (m=%g, b=%g)\t\t\tCalculated (m=%g, b=%g, r=%g)\n" %\
(coefficients[state][0], coefficients[state][1], values[0], \
values[1], values[2])
except:
pass
TestText("bestline_1_00", s)
removeFiles(data[0])
DeleteAllPlots()
#
# Test best fit line of 2D Scatter plots
#
def test2():
# Do Scatter plot of d vs d since we know that it will make Y=X
OpenDatabase(silo_data_path("multi_curv2d.silo"))
AddPlot("Scatter", "d")
s = ScatterAttributes()
s.var2 = "d"
s.var2Role = s.Coordinate1
s.var3Role = s.NONE
s.var4Role = s.NONE
s.scaleCube = 0
s.pointSizePixels = 5
SetPlotOptions(s)
DrawPlots()
# Turn on Fullframe
v = GetView2D()
v.fullFrameActivationMode = v.On
SetView2D(v)
Test("bestline_2_00")
Query("Best Fit Line")
TestText("bestline_2_01", GetQueryOutputString())
# Check the best fit with another known line eq.
DeleteAllPlots()
OpenDatabase(silo_data_path("curv2d.silo"))
DefineScalarExpression("t", "zoneid(curvmesh2d)")
DefineScalarExpression("line", "t * 0.33333 + 10.")
AddPlot("Scatter", "t")
s.var2 = "line"
SetPlotOptions(s)
DrawPlots()
ResetView()
Test("bestline_2_02")
Query("Best Fit Line")
TestText("bestline_2_03", GetQueryOutputString())
# Make the scatter plot be d vs. dpu
DeleteAllPlots()
OpenDatabase(silo_data_path("multi_curv2d.silo"))
AddPlot("Scatter", "d")
DefineScalarExpression("dpu", "d + u / 3.")
s.var2 = "dpu"
SetPlotOptions(s)
DrawPlots()
Test("bestline_2_04")
Query("Best Fit Line")
TestText("bestline_2_05", GetQueryOutputString())
return s
#
# Test distance to best fit line expression. The colors should appear
# to be banded about the best fit line.
#
def test3(s):
# We still have the Scatter plot from the previous test. Color it
# by the distance from the best fit line.
DefineScalarExpression("DBFL", "distance_to_best_fit_line(d, dpu)")
DefineScalarExpression("DBFL2", "distance_to_best_fit_line2(d, dpu)")
s.var3 = "DBFL"
s.var3Role = s.Color
s.colorTableName = "difference"
s.pointSizePixels = 10
SetPlotOptions(s)
Test("bestline_3_00")
s.var3 = "DBFL2"
SetPlotOptions(s)
Test("bestline_3_01")
DefineScalarExpression("dpus", "d + u / 2. + sin(d * 5.) * 2.")
DefineScalarExpression("DBFL3", "distance_to_best_fit_line(d, dpus)")
DefineScalarExpression("DBFL4", "distance_to_best_fit_line2(d, dpus)")
s.var2 = "dpus"
s.var3 = "DBFL3"
SetPlotOptions(s)
Test("bestline_3_02")
s.var3 = "DBFL4"
SetPlotOptions(s)
Test("bestline_3_03")
return
def main():
test1()
s = test2()
test3(s)
main()
Exit()