Integrate python script

This commit is contained in:
Francis Santelices 2025-04-07 16:14:22 +08:00
parent c99692fc36
commit a81d412ae6
5 changed files with 357 additions and 149 deletions

4
.gitignore vendored
View File

@ -1,2 +1,4 @@
.DS_Store .DS_Store
__pycache__/ __pycache__/
venv/
uploads/

7
app.py
View File

@ -4,6 +4,7 @@ from flask_wtf import FlaskForm
from flask_wtf.file import FileField, FileRequired, FileAllowed from flask_wtf.file import FileField, FileRequired, FileAllowed
from wtforms import SubmitField from wtforms import SubmitField
from flask_uploads import UploadSet, IMAGES, configure_uploads from flask_uploads import UploadSet, IMAGES, configure_uploads
from scripts.img_V01 import ComputeMain
app = Flask(__name__) app = Flask(__name__)
@ -31,9 +32,13 @@ def index():
if form.validate_on_submit(): if form.validate_on_submit():
filename = photos.save(form.photo.data) filename = photos.save(form.photo.data)
file_url = url_for('get_file', filename=filename) file_url = url_for('get_file', filename=filename)
# Compute surface tension
results = ComputeMain(app.config['UPLOADED_PHOTOS_DEST'] + "/" + filename)
else: else:
file_url = None file_url = None
return render_template('index.html', form=form, file_url=file_url) results = None
return render_template('index.html', form=form, file_url=file_url, results=results)

7
requirements.txt Normal file
View File

@ -0,0 +1,7 @@
Flask==3.1.0
flask_uploads==0.2.1
flask_wtf==1.2.2
numpy==2.2.4
opencv_python==4.11.0.86
scipy==1.15.2
WTForms==3.2.1

View File

@ -538,13 +538,7 @@ def PrintCorrectUsage():
print("4. Setting min (0.00001) and max (1.5) values for parameter.") print("4. Setting min (0.00001) and max (1.5) values for parameter.")
print("./img.py -img water-drop.jpg -out water-drop -a 0.00001 -A 1.5\n") print("./img.py -img water-drop.jpg -out water-drop -a 0.00001 -A 1.5\n")
def ComputeMain(ImageFilePath):
# ========== MAIN ==========
if __name__ == '__main__':
ImageFilePath = ""
OutputFileName = "" OutputFileName = ""
PosPointsFileName = "" PosPointsFileName = ""
NegPointsFileName = "" NegPointsFileName = ""
@ -563,10 +557,6 @@ if __name__ == '__main__':
XStep = 5 XStep = 5
TStep = 5 TStep = 5
if (len(sys.argv) <= 1):
PrintCorrectUsage()
sys.exit()
ImageFlag = 0 ImageFlag = 0
PosFileFlag = 0 PosFileFlag = 0
NegFileFlag = 0 NegFileFlag = 0
@ -574,79 +564,6 @@ if __name__ == '__main__':
Counter = 1 Counter = 1
SolveMethod = 0 SolveMethod = 0
while (Counter <= len(sys.argv)-1):
CurrentOption = sys.argv[Counter]
try:
CurrentValue = sys.argv[Counter+1]
except:
PrintCorrectUsage()
sys.exit()
if CurrentOption == "-help":
PrintCorrectUsage()
sys.exit()
elif CurrentOption == "-img":
ImageFilePath = CurrentValue
ImageFlag = 1
elif CurrentOption == "-filep":
PosPointsFileName = CurrentValue
PosFileFlag = 1
elif CurrentOption == "-filen":
NegPointsFileName = CurrentValue
NegFileFlag = 1
elif CurrentOption == "-out":
OutputFileName = CurrentValue
OutFlag = 1
elif CurrentOption == "-proc":
ProcessCount = int(CurrentValue)
elif CurrentOption == "-syrg":
SyringeWidth = float(CurrentValue)
elif CurrentOption == "-a":
MinA_radCurv = float(CurrentValue)
elif CurrentOption == "-A":
MaxA_radCurv = float(CurrentValue)
elif CurrentOption == "-b":
MinB_shapeFact = float(CurrentValue)
elif CurrentOption == "-B":
MaxB_shapeFact = float(CurrentValue)
elif CurrentOption == "-x":
MinX = float(CurrentValue)
elif CurrentOption == "-X":
MaxX = float(CurrentValue)
elif CurrentOption == "-t":
MinT_angle = float(CurrentValue)
elif CurrentOption == "-T":
MaxT_angle = float(CurrentValue)
elif CurrentOption == "-ai":
AStep = int(CurrentValue)
elif CurrentOption == "-bi":
BStep = int(CurrentValue)
elif CurrentOption == "-xi":
XStep = int(CurrentValue)
elif CurrentOption == "-ti":
TStep = int(CurrentValue)
elif CurrentOption == "-solver":
SolveMethod = int(CurrentValue)
else:
PrintCorrectUsage()
sys.exit()
Counter = Counter + 2
if (OutFlag == 0 and ImageFlag == 1):
print("Output file name not set. (-out)")
PrintCorrectUsage()
sys.exit()
if (ImageFlag == 1 and ((PosFileFlag == 1) or (NegFileFlag == 1))):
print("Image(-img) can not be set with files option (-filep, -filen).")
print("Either set image only or files only.")
PrintCorrectUsage()
sys.exit()
if (ImageFlag == 0 and ((PosFileFlag == 1 and NegFileFlag == 0) or (PosFileFlag == 0 and NegFileFlag == 1))):
print("File inputs (-filep, -filen) should both be set if image input is not set.")
PrintCorrectUsage()
sys.exit()
ARange_radCurv = [] ARange_radCurv = []
a = MinA_radCurv a = MinA_radCurv
ahop = float(MaxA_radCurv - MinA_radCurv)/float(AStep-1) ahop = float(MaxA_radCurv - MinA_radCurv)/float(AStep-1)
@ -691,49 +608,14 @@ if __name__ == '__main__':
if(np.abs(MaxT_angle - TRange_angle[len(TRange_angle)-1] - thop) < 0.000001 and thop != 0.0): if(np.abs(MaxT_angle - TRange_angle[len(TRange_angle)-1] - thop) < 0.000001 and thop != 0.0):
TRange_angle.append(MaxT_angle) TRange_angle.append(MaxT_angle)
Pos_edgePts, Neg_edgePts, De_scaledMaxWidth, Dms_diamters = ExtractEdgeCoordinate(ImageFilePath, OutputFileName, SyringeWidth)
print("\n") HInv1 = HJuza(Dms_diamters[7]/De_scaledMaxWidth, 0.8)
if (ImageFlag == 1): HInv2 = HJuza(Dms_diamters[8]/De_scaledMaxWidth, 0.9)
print("Image File : " + ImageFilePath) HInv3 = HJuza(Dms_diamters[9]/De_scaledMaxWidth, 1.0)
print("Output Name : " + OutputFileName) HInv4 = HJuza(Dms_diamters[10]/De_scaledMaxWidth, 1.1)
print("Negative Cooridnate File : " + OutputFileName + "_Negative.dat") HInv5 = HJuza(Dms_diamters[11]/De_scaledMaxWidth, 1.2)
print("Positive Cooridnate File : " + OutputFileName + "_Positive.dat") HInvM = (0.20)*(HInv1 + HInv2 + HInv3 + HInv4 + HInv5)
print("Syringe Width (millimeter): " + str(SyringeWidth)) HInvSD = math.sqrt((0.20)*( (HInv1-HInvM)**2.0 + (HInv2-HInvM)**2.0 + (HInv3-HInvM)**2.0 + (HInv4-HInvM)**2.0 + (HInv5-HInvM)**2.0))
else:
print("Negative Cooridnate File : " + NegPointsFileName)
print("Positive Cooridnate File : " + PosPointsFileName)
print("Radius of Curvature Range : " + str(MinA_radCurv) + "-" + str(MaxA_radCurv) + " (interval: "+str(len(ARange_radCurv))+")")
print("Shape Factor Range : " + str(MinB_shapeFact) + "-" + str(MaxB_shapeFact) + " (interval: "+str(len(BRange_shapeFact))+")")
print("Initial X Coordinate Range: " + str(MinX) + "-" + str(MaxX) + " (interval: "+str(len(XRange))+")")
print("Initial Angle Range : " + str(MinT_angle) + "-" + str(MaxT_angle) + " (interval: "+str(len(TRange_angle))+")")
print("Parameter Combinations : " + str(len(ARange_radCurv) * len(BRange_shapeFact) * len(XRange) * len(TRange_angle)))
print("Number of Process to Use : " + str(ProcessCount))
if (ImageFlag == 1):
Pos_edgePts, Neg_edgePts, De_scaledMaxWidth, Dms_diamters = ExtractEdgeCoordinate(ImageFilePath, OutputFileName, SyringeWidth)
HInv1 = HJuza(Dms_diamters[7]/De_scaledMaxWidth, 0.8)
HInv2 = HJuza(Dms_diamters[8]/De_scaledMaxWidth, 0.9)
HInv3 = HJuza(Dms_diamters[9]/De_scaledMaxWidth, 1.0)
HInv4 = HJuza(Dms_diamters[10]/De_scaledMaxWidth, 1.1)
HInv5 = HJuza(Dms_diamters[11]/De_scaledMaxWidth, 1.2)
HInvM = (0.20)*(HInv1 + HInv2 + HInv3 + HInv4 + HInv5)
HInvSD = math.sqrt((0.20)*( (HInv1-HInvM)**2.0 + (HInv2-HInvM)**2.0 + (HInv3-HInvM)**2.0 + (HInv4-HInvM)**2.0 + (HInv5-HInvM)**2.0))
print("Juza 5-Plane (1/H) Std.Dev: " + str(HInvSD))
else:
Pos_edgePts = []
PositivePointFile = open(PosPointsFileName,'r')
for Line in PositivePointFile:
Coordinate = Line.split()
#print(Coordinate)
Pos_edgePts.append((float(Coordinate[0]), float(Coordinate[1])))
PositivePointFile.close()
Neg_edgePts = []
NegativePointFile = open(NegPointsFileName,'r')
for Line in NegativePointFile:
Coordinate = Line.split()
#print(Coordinate)
Neg_edgePts.append((float(Coordinate[0]), float(Coordinate[1])))
NegativePointFile.close()
def BruteForce(): def BruteForce():
PosList = [] PosList = []
@ -783,17 +665,308 @@ if __name__ == '__main__':
def Optimize(): def Optimize():
return OptimizeParameters(Pos_edgePts, Neg_edgePts, 0.95, 0.3, 0.1, 0.2) return OptimizeParameters(Pos_edgePts, Neg_edgePts, 0.95, 0.3, 0.1, 0.2)
starttime = time.time() starttime = time.time()
BestOutput = Optimize() if 1 != SolveMethod else BruteForce() BestOutput = Optimize() if 1 != SolveMethod else BruteForce()
print("best output: " + str(BestOutput)) # print("Negative Cooridnate File : " + OutputFileName + "_Negative.dat")
# print("Positive Cooridnate File : " + OutputFileName + "_Positive.dat")
# print("Syringe Width (millimeter): " + str(SyringeWidth))
# print("Radius of Curvature Range : " + str(MinA_radCurv) + "-" + str(MaxA_radCurv) + " (interval: "+str(len(ARange_radCurv))+")")
# print("Shape Factor Range : " + str(MinB_shapeFact) + "-" + str(MaxB_shapeFact) + " (interval: "+str(len(BRange_shapeFact))+")")
# print("Initial X Coordinate Range: " + str(MinX) + "-" + str(MaxX) + " (interval: "+str(len(XRange))+")")
# print("Initial Angle Range : " + str(MinT_angle) + "-" + str(MaxT_angle) + " (interval: "+str(len(TRange_angle))+")")
# print("Parameter Combinations : " + str(len(ARange_radCurv) * len(BRange_shapeFact) * len(XRange) * len(TRange_angle)))
# print("Number of Process to Use : " + str(ProcessCount))
# print("Juza 5-Plane (1/H) Std.Dev: " + str(HInvSD))
# print("best output: " + str(BestOutput))
print("\nLowest RMSD : " + str(BestOutput[0])) # print("\nLowest RMSD : " + str(BestOutput[0]))
print("Computed Surface Tension : " + str(9.8*BestOutput[1]/BestOutput[2])) # print("Computed Surface Tension : " + str(9.8*BestOutput[1]/BestOutput[2]))
print("Best Radius of Curvature : " + str(BestOutput[1])) # print("Best Radius of Curvature : " + str(BestOutput[1]))
print("Best Shape Factor : " + str(BestOutput[2])) # print("Best Shape Factor : " + str(BestOutput[2]))
print("Best Initial X Coordinate : " + str(BestOutput[3])) # print("Best Initial X Coordinate : " + str(BestOutput[3]))
print("Best Initial Angle : " + str(BestOutput[4])) # print("Best Initial Angle : " + str(BestOutput[4]))
print("Lapsed Time in Seconds : " + str(time.time() -starttime)) # print("Lapsed Time in Seconds : " + str(time.time() -starttime))
return {
"negCoordFile": OutputFileName + "_Negative.dat",
"posCoordFile": OutputFileName + "_Positive.dat",
"syringeWidth": SyringeWidth,
"radiusCurvatureRange": str(MinA_radCurv) + "-" + str(MaxA_radCurv) + " (interval: "+str(len(ARange_radCurv))+")",
"shapeFactorRange": str(MinB_shapeFact) + "-" + str(MaxB_shapeFact) + " (interval: "+str(len(BRange_shapeFact))+")",
"initialXCoordinateRange": str(MinX) + "-" + str(MaxX) + " (interval: "+str(len(XRange))+")",
"initialAngleRange": str(MinT_angle) + "-" + str(MaxT_angle) + " (interval: "+str(len(TRange_angle))+")",
"paramCombinations": len(ARange_radCurv) * len(BRange_shapeFact) * len(XRange) * len(TRange_angle),
"numProcess": ProcessCount,
"juza": HInvSD,
"lowestRMSD": BestOutput[0],
"computedSurfaceTension": 9.8*BestOutput[1]/BestOutput[2],
"bestRadiusCurvature": BestOutput[1],
"bestShapeFactor": BestOutput[2],
"bestInitialXCoordinate": BestOutput[3],
"bestInitialAngle": BestOutput[4],
"lapsedTime": time.time()-starttime
}
# ========== MAIN ==========
if __name__ == '__main__':
ImageFilePath = '/Users/fsantelices/Desktop/Pendant Drop App/Surface Tension Data/data/ambient-6-26-15-mf-3-30s-MORPHED.jpg'
print(ComputeMain(ImageFilePath))
# ImageFilePath = ""
# OutputFileName = ""
# NegPointsFileName = ""
# ProcessCount = 2
# SyringeWidth = 0.70 * 1.15
# MinA_radCurv = 0.0001
# MaxA_radCurv = 2.0001
# MinB_shapeFact = 0.0001
# MaxB_shapeFact = 1.0001
# MinX = 0.0001
# MaxX = 0.5001
# MinT_angle = 0.0001
# MaxT_angle = 0.5001
# AStep = 20
# BStep = 20
# XStep = 5
# TStep = 5
# ImageFlag = 0
# PosFileFlag = 0
# NegFileFlag = 0
# OutFlag = 0
# Counter = 1
# SolveMethod = 0
# if (len(sys.argv) <= 1):
# PrintCorrectUsage()
# sys.exit()
# while (Counter <= len(sys.argv)-1):
# CurrentOption = sys.argv[Counter]
# try:
# CurrentValue = sys.argv[Counter+1]
# except:
# PrintCorrectUsage()
# sys.exit()
# if CurrentOption == "-help":
# PrintCorrectUsage()
# sys.exit()
# elif CurrentOption == "-img":
# ImageFilePath = CurrentValue
# ImageFlag = 1
# elif CurrentOption == "-filep":
# PosPointsFileName = CurrentValue
# PosFileFlag = 1
# elif CurrentOption == "-filen":
# NegPointsFileName = CurrentValue
# NegFileFlag = 1
# elif CurrentOption == "-out":
# OutputFileName = CurrentValue
# OutFlag = 1
# elif CurrentOption == "-proc":
# ProcessCount = int(CurrentValue)
# elif CurrentOption == "-syrg":
# SyringeWidth = float(CurrentValue)
# elif CurrentOption == "-a":
# MinA_radCurv = float(CurrentValue)
# elif CurrentOption == "-A":
# MaxA_radCurv = float(CurrentValue)
# elif CurrentOption == "-b":
# MinB_shapeFact = float(CurrentValue)
# elif CurrentOption == "-B":
# MaxB_shapeFact = float(CurrentValue)
# elif CurrentOption == "-x":
# MinX = float(CurrentValue)
# elif CurrentOption == "-X":
# MaxX = float(CurrentValue)
# elif CurrentOption == "-t":
# MinT_angle = float(CurrentValue)
# elif CurrentOption == "-T":
# MaxT_angle = float(CurrentValue)
# elif CurrentOption == "-ai":
# AStep = int(CurrentValue)
# elif CurrentOption == "-bi":
# BStep = int(CurrentValue)
# elif CurrentOption == "-xi":
# XStep = int(CurrentValue)
# elif CurrentOption == "-ti":
# TStep = int(CurrentValue)
# elif CurrentOption == "-solver":
# SolveMethod = int(CurrentValue)
# else:
# PrintCorrectUsage()
# sys.exit()
# Counter = Counter + 2
# if (OutFlag == 0 and ImageFlag == 1):
# print("Output file name not set. (-out)")
# PrintCorrectUsage()
# sys.exit()
# if (ImageFlag == 1 and ((PosFileFlag == 1) or (NegFileFlag == 1))):
# print("Image(-img) can not be set with files option (-filep, -filen).")
# print("Either set image only or files only.")
# PrintCorrectUsage()
# sys.exit()
# if (ImageFlag == 0 and ((PosFileFlag == 1 and NegFileFlag == 0) or (PosFileFlag == 0 and NegFileFlag == 1))):
# print("File inputs (-filep, -filen) should both be set if image input is not set.")
# PrintCorrectUsage()
# sys.exit()
# ARange_radCurv = []
# a = MinA_radCurv
# ahop = float(MaxA_radCurv - MinA_radCurv)/float(AStep-1)
# while (a <= MaxA_radCurv):
# ARange_radCurv.append(a)
# a += ahop
# if ahop == 0.0:
# break
# if(np.abs(MaxA_radCurv - ARange_radCurv[len(ARange_radCurv)-1] - ahop) < 0.000001 and ahop != 0.0):
# ARange_radCurv.append(MaxA_radCurv)
# BRange_shapeFact = []
# b = MinB_shapeFact
# bhop = float(MaxB_shapeFact - MinB_shapeFact)/float(BStep-1)
# while (b <= MaxB_shapeFact):
# BRange_shapeFact.append(b)
# b += bhop
# if bhop == 0:
# break
# if(np.abs(MaxB_shapeFact - BRange_shapeFact[len(BRange_shapeFact)-1] - bhop) < 0.000001 and bhop != 0.0):
# BRange_shapeFact.append(MaxB_shapeFact)
# XRange = []
# x = MinX
# xhop = float(MaxX - MinX)/float(XStep-1)
# while (x <= MaxX):
# XRange.append(x)
# x += xhop
# if xhop == 0:
# break
# if(np.abs(MaxX - XRange[len(XRange)-1] - xhop) < 0.000001 and xhop != 0.0):
# XRange.append(MaxX)
# TRange_angle = []
# t = MinT_angle
# thop = float(MaxT_angle - MinT_angle)/float(TStep-1)
# while (t <= MaxT_angle):
# TRange_angle.append(t)
# t += thop
# if thop == 0.0:
# break
# if(np.abs(MaxT_angle - TRange_angle[len(TRange_angle)-1] - thop) < 0.000001 and thop != 0.0):
# TRange_angle.append(MaxT_angle)
# print("\n")
# if (ImageFlag == 1):
# print("Image File : " + ImageFilePath)
# print("Output Name : " + OutputFileName)
# print("Negative Cooridnate File : " + OutputFileName + "_Negative.dat")
# print("Positive Cooridnate File : " + OutputFileName + "_Positive.dat")
# print("Syringe Width (millimeter): " + str(SyringeWidth))
# else:
# print("Negative Cooridnate File : " + NegPointsFileName)
# print("Positive Cooridnate File : " + PosPointsFileName)
# print("Radius of Curvature Range : " + str(MinA_radCurv) + "-" + str(MaxA_radCurv) + " (interval: "+str(len(ARange_radCurv))+")")
# print("Shape Factor Range : " + str(MinB_shapeFact) + "-" + str(MaxB_shapeFact) + " (interval: "+str(len(BRange_shapeFact))+")")
# print("Initial X Coordinate Range: " + str(MinX) + "-" + str(MaxX) + " (interval: "+str(len(XRange))+")")
# print("Initial Angle Range : " + str(MinT_angle) + "-" + str(MaxT_angle) + " (interval: "+str(len(TRange_angle))+")")
# print("Parameter Combinations : " + str(len(ARange_radCurv) * len(BRange_shapeFact) * len(XRange) * len(TRange_angle)))
# print("Number of Process to Use : " + str(ProcessCount))
# if (ImageFlag == 1):
# Pos_edgePts, Neg_edgePts, De_scaledMaxWidth, Dms_diamters = ExtractEdgeCoordinate(ImageFilePath, OutputFileName, SyringeWidth)
# HInv1 = HJuza(Dms_diamters[7]/De_scaledMaxWidth, 0.8)
# HInv2 = HJuza(Dms_diamters[8]/De_scaledMaxWidth, 0.9)
# HInv3 = HJuza(Dms_diamters[9]/De_scaledMaxWidth, 1.0)
# HInv4 = HJuza(Dms_diamters[10]/De_scaledMaxWidth, 1.1)
# HInv5 = HJuza(Dms_diamters[11]/De_scaledMaxWidth, 1.2)
# HInvM = (0.20)*(HInv1 + HInv2 + HInv3 + HInv4 + HInv5)
# HInvSD = math.sqrt((0.20)*( (HInv1-HInvM)**2.0 + (HInv2-HInvM)**2.0 + (HInv3-HInvM)**2.0 + (HInv4-HInvM)**2.0 + (HInv5-HInvM)**2.0))
# print("Juza 5-Plane (1/H) Std.Dev: " + str(HInvSD))
# else:
# Pos_edgePts = []
# PositivePointFile = open(PosPointsFileName,'r')
# for Line in PositivePointFile:
# Coordinate = Line.split()
# #print(Coordinate)
# Pos_edgePts.append((float(Coordinate[0]), float(Coordinate[1])))
# PositivePointFile.close()
# Neg_edgePts = []
# NegativePointFile = open(NegPointsFileName,'r')
# for Line in NegativePointFile:
# Coordinate = Line.split()
# #print(Coordinate)
# Neg_edgePts.append((float(Coordinate[0]), float(Coordinate[1])))
# NegativePointFile.close()
# def BruteForce():
# PosList = []
# NegList = []
# for ProcessNo in range(ProcessCount):
# PosList.append(copy.deepcopy(Pos_edgePts))
# NegList.append(copy.deepcopy(Neg_edgePts))
# #print(ProcessNo)
# ARanges = []
# for ProcessNo in range(ProcessCount):
# ARanges.append([])
# i = 0
# for A in ARange_radCurv:
# ARanges[i%ProcessCount].append(A)
# i += 1
# BestParams = multiprocessing.Queue()
# TicksQueue = multiprocessing.Queue()
# Processes = []
# for ProcessNo in range(ProcessCount):
# Processes.append(multiprocessing.Process(name='Search ' + str(ProcessNo), target=FindOptimalParameters, args=(PosList[ProcessNo], NegList[ProcessNo], ARanges[ProcessNo], BRange_shapeFact, XRange, TRange_angle, BestParams, TicksQueue)))
# for aProcess in Processes:
# aProcess.start()
# sys.stdout.write("\rParameter Search Progress : 0%")
# sys.stdout.flush()
# Count = 0
# while(Count < len(ARange_radCurv)):
# t = TicksQueue.get()
# Count += 1
# sys.stdout.write("\rParameter Search Progress : " + str(int(100*float(Count)/float(len(ARange_radCurv)))) + "%")
# sys.stdout.flush()
# for aProcess in Processes:
# aProcess.join()
# BestOutput = (999999999, 1, 1, 1 ,1)
# while not BestParams.empty():
# Output = BestParams.get()
# if Output[0] < BestOutput[0]:
# BestOutput = Output
# return BestOutput
# def Optimize():
# return OptimizeParameters(Pos_edgePts, Neg_edgePts, 0.95, 0.3, 0.1, 0.2)
# starttime = time.time()
# BestOutput = Optimize() if 1 != SolveMethod else BruteForce()
# print("best output: " + str(BestOutput))
# print("\nLowest RMSD : " + str(BestOutput[0]))
# print("Computed Surface Tension : " + str(9.8*BestOutput[1]/BestOutput[2]))
# print("Best Radius of Curvature : " + str(BestOutput[1]))
# print("Best Shape Factor : " + str(BestOutput[2]))
# print("Best Initial X Coordinate : " + str(BestOutput[3]))
# print("Best Initial Angle : " + str(BestOutput[4]))
# print("Lapsed Time in Seconds : " + str(time.time() -starttime))

View File

@ -9,13 +9,13 @@
</div> </div>
<div class="row p-4 mb-3 maindiv"> <div class="row p-4 mb-3 maindiv">
<!-- IMAGE DISPLAY AND BUTTONS --> <!-- IMAGE DISPLAY AND BUTTONS -->
<div class="col-5"> <div class="col-6">
{% if file_url %} {% if file_url %}
<div class="row mb-3 text-center imagediv"> <div class="row mb-3 text-center imagediv">
<img src="{{ file_url }}" style="height: 400px; width: 500px;"> <img src="{{ file_url }}" style="height: 450px; width: 600px;">
</div> </div>
{% else %} {% else %}
<div class="row p-4 mb-3 text-center imagediv" style="height: 400px; width: 500;"> <div class="row p-4 mb-3 text-center imagediv" style="height: 450px; width: 600;">
No image uploaded No image uploaded
</div> </div>
{% endif %} {% endif %}
@ -38,13 +38,13 @@
</div> </div>
<!-- TENSIOMETRY RESULTS --> <!-- TENSIOMETRY RESULTS -->
<div class="col-7 px-5"> <div class="col px-5">
<h4><b>Results:</b></h4> <h4><b>Results:</b></h4>
<div class="row"> <div class="row">
<div class="col-5 labels"> <div class="col-5 labels">
Negative Cooridnate File:<br> <!-- Negative Cooridnate File:<br>
Positive Cooridnate File:<br> Positive Cooridnate File:<br> -->
Syringe Width (millimeter):<br> Syringe Width (mm):<br>
Radius of Curvature Range:<br> Radius of Curvature Range:<br>
Shape Factor Range :<br> Shape Factor Range :<br>
Initial X Coordinate Range:<br> Initial X Coordinate Range:<br>
@ -52,18 +52,39 @@
Parameter Combinations:<br> Parameter Combinations:<br>
Number of Process to Use:<br> Number of Process to Use:<br>
Juza 5-Plane (1/H) Std.Dev:<br> Juza 5-Plane (1/H) Std.Dev:<br>
</div>
best output:<br> <div class="col">
<!-- {{ results.negCoordFile }} <br>
{{ results.posCoordFile }} <br> -->
{{ results.syringeWidth }} <br>
{{ results.radiusCurvatureRange }} <br>
{{ results.shapeFactorRange }} <br>
{{ results.initialXCoordinateRange }} <br>
{{ results.initialAngleRange }} <br>
{{ results.paramCombinations }} <br>
{{ results.numProcess }} <br>
{{ results.juza }} <br>
</div>
</div>
<hr class="border-1 border-emphasis" />
<div class="row">
<div class="col-5 labels">
Lowest RMSD:<br> Lowest RMSD:<br>
Computed Surface Tension:<br> Computed Surface Tension:<br>
Best Radius of Curvature:<br> Best Radius of Curvature:<br>
Best Shape Factor:<br> Best Shape Factor:<br>
Best Initial X Coordinate:<br> Best Initial X Coordinate:<br>
Best Initial Angle:<br> Best Initial Angle:<br>
Lapsed Time in Seconds:<br> Lapsed Time (secs)):<br>
</div> </div>
<div class="col"> <div class="col">
asdsadsa {{ results.lowestRMSD }} <br>
{{ results.computedSurfaceTension }} <br>
{{ results.bestRadiusCurvature }} <br>
{{ results.bestShapeFactor }} <br>
{{ results.bestInitialXCoordinate }} <br>
{{ results.bestInitialAngle }} <br>
{{ results.lapsedTime }} <br>
</div> </div>
</div> </div>
</div> </div>