Gauge block measurement (GUM H1)
An example from Appendix H1 of the GUM [1].
Code
from __future__ import print_function
from GTC import *
print("""
-------------------------------
Example from Appendix H1 of GUM
-------------------------------
""")
# Lengths are in nm
d0 = ureal(215,5.8,24,label='d0')
d1 = ureal(0.0,3.9,5,label='d1')
d2 = ureal(0.0,6.7,8,label='d2')
# Intermediate quantity 'd'
d = d0 + d1 + d2
alpha_s = ureal(11.5E-6, type_b.uniform(2E-6),label='alpha_s')
d_alpha = ureal(0.0, type_b.uniform(1E-6), 50,label='d_alpha')
d_theta = ureal(0.0, type_b.uniform(0.05), 2,label='d_theta')
theta_bar = ureal(-0.1,0.2,label='theta_bar')
Delta = ureal(0.0, type_b.arcsine(0.5),label='Delta')
# Intermediate quantity 'theta'
theta = theta_bar + Delta
l_s = ureal(5.0000623E7,25,18,label='l_s')
# two more intermediate steps
tmp1 = l_s * d_alpha * theta
tmp2 = l_s * alpha_s * d_theta
# Final equation for the measurement result
l = result( l_s + d - (tmp1 + tmp2), label='l')
print( "Measurement result for l={}".format(l) )
print("""
Components of uncertainty in l (nm)
-----------------------------------""")
for i in reporting.budget(l):
print( " {!s}: {:G}".format(i.label,i.u) )
Explanation
The measurand is the length of an end-gauge at \(20\,^\circ\mathrm{C}\). The measurement equation is [2]
where
\(l_\mathrm{s}\) - the length of the standard
\(d\) - the difference in length between the standard and the end-gauge
\(\delta_\alpha\) - the difference between coefficients of thermal expansion for the standard and the end-gauge
\(\theta\) - the deviation in temperature from \(20\,^\circ\mathrm{C}\)
\(\alpha_\mathrm{s}\) - the coefficient of thermal expansion for the standard
\(\delta_\theta\) - the temperature difference between the standard and the end-gauge
The calculation proceeds in stages. First, three inputs are defined:
the length difference measurement(
d0
) using the comparator, which is the arithmetic mean of several indications;an estimate of comparator random errors (
d1
) andan estimate of comparator systematic errors (
d2
).
These are used to define the intermediate result d
d0 = ureal(215,5.8,24,label='d0')
d1 = ureal(0.0,3.9,5,label='d1')
d2 = ureal(0.0,6.7,8,label='d2')
# Intermediate quantity 'd'
d = d0 + d1 + d2
Then terms are introduced to account for temperature variability and thermal properties of the gauge blocks.
In particular, the quantity \(\theta\) is defined in terms of two other input quantities
where
\(\bar{\theta}\) is the mean deviation of the test-bed temperature from \(20\,^\circ\mathrm{C}\)
\(\Delta\) is a cyclical error in the test-bed temperature
In defining these inputs, functions type_b.uniform()
and type_b.arcsine()
convert the widths of particular error distributions into standard uncertainties [3].
alpha_s = ureal( 11.5E-6, type_b.uniform(2E-6), label='alpha_s' )
d_alpha = ureal(0.0, type_b.uniform(1E-6), 50, label='d_alpha')
d_theta = ureal(0.0, type_b.uniform(0.05), 2, label='d_theta')
theta_bar = ureal(-0.1,0.2, label='theta_bar')
Delta = ureal(0.0, type_b.arcsine(0.5), label='Delta' )
# Intermediate quantity 'theta'
theta = theta_bar + Delta
The length of the standard gauge block is given in a calibration report
l_s = ureal(5.0000623E7,25,18,label='ls')
two more intermediate results, representing thermal errors, are then
# two more intermediate steps
tmp1 = l_s * d_alpha * theta
tmp2 = l_s * alpha_s * d_theta
Finally, the length of the gauge block is evaluated
# Final equation for the measurement result
l = result( l_s + d - (tmp1 + tmp2), label='l')
The script then evaluates the measurement result
print( "Measurement result for l={}".format(l) )
which displays
Measurement result for l=50000838(32)
and the following commands display the components of uncertainty for l
, due to each influence:
print("""
Components of uncertainty in l (nm)
-----------------------------------""")
for l_i,u_i in reporting.budget(l):
print( " {!s}: {:G}".format(l_i,u_i) )
The output is
Components of uncertainty in l (nm)
-----------------------------------
ls: 25
d_theta: 16.599
d2: 6.7
d0: 5.8
d1: 3.9
d_alpha: 2.88679
alpha_s: 0
theta_bar: 0
Delta: 0
Footnotes