%@LANGUAGE="VBScript"%> <% Set Connection = Server.CreateObject("ADODB.Connection") Connection.Mode = adModeRead Connection.Open phdb_rd SQLStmt = "select keynumber,to_char(logdate,'MM/DD/YYYY HH24:MI:SS') ddate,logdate-Sysdate datediff,bias,capacitance,comments from sitester.testkey_pn,sitester.sensor_log where startdate=logdate and sensor_log.batch='"+Request("batch")+"' and sensor_log.sensor="+Request("sensor")+" order by keynumber,logdate,bias" Set RS = Connection.Execute(SQLStmt) %> <% folderspec=ph_image_directory seed=-(second(now())+60*minute(now())+3600*hour(now())+3600*24*day(now())) %>
<%
keynumber = CInt(RS("keynumber"))
dd = CDbl(RS("datediff"))
ddate = CStr(RS("ddate"))
If IsNull(RS("comments")) Then
comments=""
Else
comments = CStr(RS("comments"))
End If
error2=0.0
index_start=0
index_end=0
a1=0.0
da1=0.0
b1=0.0
db1=0.0
a2=0.0
da2=0.0
b2=0.0
db2=0.0
da1b1=0.0
da2b2=0.0
pivot=0
' fill the voltage and capacitance arrays
i=0
found = 0
Do While (found = 0)
If Not RS.EOF then
Select Case Sgn(CInt(RS("keynumber"))-keynumber)
case 1
found = 1
case 0
Select Case Sgn(CDbl(RS("datediff"))-dd)
case 1
found = 1
case 0
ReDim Preserve voltage(i)
ReDim Preserve capacitance(i)
voltage(i) = CDbl(RS("Bias"))
capacitance(i) = CDbl(RS("Capacitance"))
i=i+1
RS.MoveNext
case -1
found = 1
End Select
case -1
Response.Write "Error"
End Select
Else
found = 1
End If
Loop
' end filling
' fill the log arrays, j is the number of elements in the arrays
j=0
For n = 0 To i-1
If ((voltage(n) > 0.0) and (capacitance(n) > 0.0)) Then
ReDim Preserve log_voltage(j)
ReDim Preserve log_capacitance(j)
log_voltage(j)=Log(voltage(n))
log_capacitance(j)=Log(capacitance(n))
j=j+1
End If
Next
' end filling
index_start=0
index_end=j-1
For m = 2 To j-4
x_sum1=0
x2_sum1=0
y_sum1=0
y2_sum1=0
xy_sum1=0
x_sum2=0
x2_sum2=0
y_sum2=0
y2_sum2=0
xy_sum2=0
For n = 0 To m
x_sum1=x_sum1+log_voltage(n)
x2_sum1=x2_sum1+log_voltage(n)*log_voltage(n)
y_sum1=y_sum1+log_capacitance(n)
y2_sum1=y2_sum1+log_capacitance(n)*log_capacitance(n)
xy_sum1=xy_sum1+log_voltage(n)*log_capacitance(n)
Next
For n = m+1 To j-1
x_sum2=x_sum2+log_voltage(n)
x2_sum2=x2_sum2+log_voltage(n)*log_voltage(n)
y_sum2=y_sum2+log_capacitance(n)
y2_sum2=y2_sum2+log_capacitance(n)*log_capacitance(n)
xy_sum2=xy_sum2+log_voltage(n)*log_capacitance(n)
Next
error2_sum1=((m+1)*y2_sum1*x2_sum1-y2_sum1*x_sum1*x_sum1-y_sum1*y_sum1*x2_sum1-(m+1)*xy_sum1*xy_sum1+2*xy_sum1*x_sum1*y_sum1)/((m+1)*x2_sum1-x_sum1*x_sum1)
error2_sum2=((j-m-1)*y2_sum2*x2_sum2-y2_sum2*x_sum2*x_sum2-y_sum2*y_sum2*x2_sum2-(j-m-1)*xy_sum2*xy_sum2+2*xy_sum2*x_sum2*y_sum2)/((j-m-1)*x2_sum2-x_sum2*x_sum2)
If((error2 > (error2_sum1+error2_sum2)) or (error2 = 0.0)) Then
a1=((m+1)*xy_sum1-x_sum1*y_sum1)/((m+1)*x2_sum1-x_sum1*x_sum1)
b1=(x2_sum1*y_sum1-x_sum1*xy_sum1)/((m+1)*x2_sum1-x_sum1*x_sum1)
a2=((j-m-1)*xy_sum2-x_sum2*y_sum2)/((j-m-1)*x2_sum2-x_sum2*x_sum2)
b2=(x2_sum2*y_sum2-x_sum2*xy_sum2)/((j-m-1)*x2_sum2-x_sum2*x_sum2)
da1=Sqr((m+1)*error2_sum1/((m-1)*((m+1)*x2_sum1-x_sum1*x_sum1)))
db1=Sqr(x2_sum1*error2_sum1/((m-1)*((m+1)*x2_sum1-x_sum1*x_sum1)))
da2=Sqr((j-m-1)*error2_sum2/((j-m-3)*((j-m-1)*x2_sum2-x_sum2*x_sum2)))
db1=Sqr(x2_sum2*error2_sum2/((j-m-3)*((j-m-1)*x2_sum2-x_sum2*x_sum2)))
da1b1=-1*x_sum1*error2_sum1/((m+1)*((m+1)*x2_sum1-x_sum1*x_sum1))
da2b2=-1*x_sum2*error2_sum2/((j-m-1)*((j-m-1)*x2_sum2-x_sum2*x_sum2))
error2=error2_sum1+error2_sum2
pivot=m
End If
Next
current_error2=0.0
current_num_points=1
Do While((((current_error2/(current_num_points-2)) > (error2/(pn_points(index_start,index_end)-2))) or (current_error2 = 0.0)) and ((pivot-index_start+1)>=10))
current_error2=error2
current_num_points=pn_points(index_start,index_end)
current_index_start=index_start+1
pivot_temp=pivot
For current_pivot = pivot_temp-1 To pivot_temp+1
x_sum1=0
x2_sum1=0
y_sum1=0
y2_sum1=0
xy_sum1=0
x_sum2=0
x2_sum2=0
y_sum2=0
y2_sum2=0
xy_sum2=0
For n = current_index_start To current_pivot
x_sum1=x_sum1+log_voltage(n)
x2_sum1=x2_sum1+log_voltage(n)*log_voltage(n)
y_sum1=y_sum1+log_capacitance(n)
y2_sum1=y2_sum1+log_capacitance(n)*log_capacitance(n)
xy_sum1=xy_sum1+log_voltage(n)*log_capacitance(n)
Next
For n = current_pivot+1 To j-1
x_sum2=x_sum2+log_voltage(n)
x2_sum2=x2_sum2+log_voltage(n)*log_voltage(n)
y_sum2=y_sum2+log_capacitance(n)
y2_sum2=y2_sum2+log_capacitance(n)*log_capacitance(n)
xy_sum2=xy_sum2+log_voltage(n)*log_capacitance(n)
Next
error2_sum1=((current_pivot-current_index_start+1)*y2_sum1*x2_sum1-y2_sum1*x_sum1*x_sum1-y_sum1*y_sum1*x2_sum1-(current_pivot-current_index_start+1)*xy_sum1*xy_sum1+2*xy_sum1*x_sum1*y_sum1)/((current_pivot-current_index_start+1)*x2_sum1-x_sum1*x_sum1)
error2_sum2=((j-current_pivot-1)*y2_sum2*x2_sum2-y2_sum2*x_sum2*x_sum2-y_sum2*y_sum2*x2_sum2-(j-current_pivot-1)*xy_sum2*xy_sum2+2*xy_sum2*x_sum2*y_sum2)/((j-current_pivot-1)*x2_sum2-x_sum2*x_sum2)
If ((error2/pn_points(index_start,index_end)) > ((error2_sum1+error2_sum2)/(j-current_index_start))) Then
pivot=current_pivot
a1=((current_pivot-current_index_start+1)*xy_sum1-x_sum1*y_sum1)/((current_pivot-current_index_start+1)*x2_sum1-x_sum1*x_sum1)
b1=(x2_sum1*y_sum1-x_sum1*xy_sum1)/((current_pivot-current_index_start+1)*x2_sum1-x_sum1*x_sum1)
a2=((j-current_pivot-1)*xy_sum2-x_sum2*y_sum2)/((j-current_pivot-1)*x2_sum2-x_sum2*x_sum2)
b2=(x2_sum2*y_sum2-x_sum2*xy_sum2)/((j-current_pivot-1)*x2_sum2-x_sum2*x_sum2)
da1=Sqr((current_pivot-current_index_start+1)*error2_sum1/((current_pivot-current_index_start-1)*((current_pivot-current_index_start+1)*x2_sum1-x_sum1*x_sum1)))
db1=Sqr(x2_sum1*error2_sum1/((current_pivot-current_index_start-1)*((current_pivot-current_index_start+1)*x2_sum1-x_sum1*x_sum1)))
da2=Sqr((j-current_pivot-1)*error2_sum2/((j-current_pivot-3)*((j-current_pivot-1)*x2_sum2-x_sum2*x_sum2)))
db1=Sqr(x2_sum2*error2_sum2/((j-current_pivot-3)*((j-current_pivot-1)*x2_sum2-x_sum2*x_sum2)))
da1b1=-1*x_sum1*error2_sum1/((current_pivot-current_index_start+1)*((current_pivot-current_index_start+1)*x2_sum1-x_sum1*x_sum1))
da2b2=-1*x_sum2*error2_sum2/((j-current_pivot-1)*((j-current_pivot-1)*x2_sum2-x_sum2*x_sum2))
error2=error2_sum1+error2_sum2
index_start=current_index_start
End If
Next
Loop
v_full_depletion=Exp(x_intercept(a1,a2,b1,b2))
v_full_depletion_error=v_full_depletion*dx_intercept(a1,a2,b1,b2,da1,da2,db1,db2,da1b1,da2b2)
'**********************************************End of Fit
seed = seed + 1
filename="pnpn" & cstr(int(100000.*rnd(seed))) & ".jpg"
filename_full=ph_image_directory & filename
Dim Log_Chart
rem **********************************************************************
rem * Instantiate the Chart component
rem **********************************************************************
Set Log_Chart = Server.CreateObject ("ASPChart.Chart")
rem **********************************************************************
rem * Create x Array
rem **********************************************************************
Log_Chart.AddSeries 5
Log_Chart.SeriesTitle = "Real Data"
Log_Chart.LineWidth = 1
For n = 0 To j-1
Log_Chart.AddXY log_voltage(n), log_capacitance(n), "",Color(1)
Next
Log_Chart.AddSeries 5
Log_Chart.SeriesTitle = "Fit Line"
Log_Chart.LineWidth = 1
For n = index_start To pivot
Log_Chart.AddXY log_voltage(n), (a1*log_voltage(n)+b1), "", Color(0)
Next
Log_Chart.AddXY x_intercept(a1,a2,b1,b2), y_intercept(a1,a2,b1,b2), "", Color(0)
Log_Chart.AddSeries 5
Log_Chart.SeriesInLegend = False
Log_Chart.LineWidth = 1
Log_Chart.AddXY x_intercept(a1,a2,b1,b2), y_intercept(a1,a2,b1,b2), "", Color(0)
For n = pivot+1 To j-1
Log_Chart.AddXY log_voltage(n), (a2*log_voltage(n)+b2), "", Color(0)
Next
rem **********************************************************************
rem * Add and format the title
rem **********************************************************************
Log_Chart.ChartTitleAdd ("Batch " & Request("batch") & ", Sensor " & Request("sensor") & ", Keynumber " & CStr(keynumber))
Log_Chart.ChartTitleFont.Size = 18
Log_Chart.ChartTitleFont.Name = "Times New Roman"
Log_Chart.ChartTitleFont.Italic = true
Log_Chart.ChartTitleFont.Bold = true
Log_Chart.View3D = false
Log_Chart.LegendStyle = cSeries
Log_Chart.AxisGridLines = true
Log_Chart.Frame = false
rem **********************************************************************
rem * Remove the OuterBevel, add a gradient fill to chart panel
rem **********************************************************************
Log_Chart.BevelOuter = 0
rem Log_Chart.GradientVisible = true
rem Log_Chart.GradientStartColor = vbWhite
rem Log_Chart.GradientEndColor = vbYellow
Log_Chart.PanelColor = Color(6)
rem **********************************************************************
rem * Set the Width and Height of the image
rem **********************************************************************
Log_Chart.Height = 400
Log_Chart.Width = 800
Log_Chart.AddAxisLabel 1 , "Log Capacitance"
Log_Chart.AddAxisLabel 2 , "Log Voltage"
rem **********************************************************************
rem * Set the filename, save the image and write the image tag
rem **********************************************************************
Log_Chart.FileName = filename_full
Log_Chart.SaveChart
line="
|