#!/usr/bin/python3
# ===================================================================
# write bell curve (normal distribution) data to a file
# ===================================================================
# the output data can be used for testing when working with a
# normal distribution
# ==================================================================
import user_interface as ui
import numpy as np
import re
import sys
# ---- global variables
mean = 0.0 # bell curve data arithmetic mean (x value)
sd = 50.0 # bell curve data standard deviation
xstart = -150.0 # bell curve x start value
xend = 150.0 # bell curve x end value
xincr = 10.0 # bell curve x increment value
ymax = 200.0 # bell curve y maximum value (at peak; at mean)
## some other data to try - asymmetrical plot
##xstart = 100.0
##xend = 300.0
# -------------------------------------------------------------------
# ---- return the bell curve y value for a given x value
# ---- x plot x value
# ---- ymax plot maximum plot y value (value at mean)
# ---- mean bell curve data arithmetic mean (x value)
# ---- sd bell curve data standard deviation (x value)
# -------------------------------------------------------------------
def BellCurveValue(x,ymax,mean,sd):
y = ymax * pow(np.e,-pow(x-mean,2.0)/(2.0*sd*sd))
return y
# -------------------------------------------------------------------
# ---- main
# -------------------------------------------------------------------
if __name__ == '__main__':
# ---- running Python3
if not ui.running_python3():
print()
print('not running Python3 - exit program')
print()
sys.quit()
# ---- open output file
filename = 'bell_curve_data.dat'
out = open(filename,'w')
# ---- output
ocount = 0 # output count
x = xstart
while x <= xend:
y = BellCurveValue(x,ymax,mean,sd)
##print(f'y = {y}')
y = round(y) # make Y an integer
if y > 0:
i = 0
while i < y:
out.write(f'{round(x)}\n')
ocount += 1
i += 1
x += xincr
# ---- close output file
out.close()
# ---- display stats
print()
print(f'{ocount} values written to output file ({filename})')
print()