Coordinates

Parameters

Procedure

Error

Calculation

Accuracy

Stability

Database

Conclusion

Here we describe our efforts to provide absolute calibration of our Wire Position Sensor Version One, or *WPS1*. We present the WPS1 and our study of its precision and stability in WPS1. We recommend you read the Optics and Geometry sections of that page before you attempt to make sense of our discussion of calibration.

By *calibration* of a WPS1, we mean the measurement of a set of characteristics of an individual WPS1 that will allow us to translate this WPS1's wire images into the absoulte position and orientation of the wire with respect to the WPS1's mounting balls. The mounting balls define a coordinate system called *mount coordinates*. Each camera has its own set of calibration constants that describe its optical properties in mount coordinates. The constants allow us to take an image of a wire and determine a plane containing the wire center-line. We call this plane the *wire plane*, and we define it with a point and a vector. We obtain the position and direction of the wire by intersecting the wire planes from both WPS cameras.

The mount coordinate origin is the center of the ball under the conical depression of teh kinematic mount. We call this ball the *cone* ball. The balls under the slot and flat depressions are the *slot* and *flat* balls respectively. The *y*-axis is upwards and perpendicular to the plane defined by the three ball centers. The *z*-axis lies in this same plane and is roughly in the direction of the arrow made by the three balls, and parallel to the nominal wire direction. The exact direction of the *z* axis is determined by the slot-cone line and the plane of the three balls. We start with the slot-cone line and rotate it by 0.2798 radians (16.031 degrees) in the plane of the three balls, so that the *z* axis passes between the slot and flat balls.

With respect to the figure above, the mount coordinate origin is at the center of the center ball. The *x*-axis is from right to left. The *y*-axis is from bottom to top. The *z*-axis is into the page.

We specify the location of features in an image with *image coordinates*. Image coordinates are left-handed on the computer screen, but right-handed on the surface of the image sensor. When we display an image, the image coordinate origin is at the top-left corner of the top-left pixel. The *x*-axis is from left to right and the *y*-axis is from top to bottom. Image coordinates are left-handed when we display an image. But when we lay the image coordinates on the image sensor surface, the origin is on the bottom-left corner of the bottom-left pixel. The *x*-axis is from left to right and the *y*-axis is from bottom to top. Image coordinates are right-handed on the sensor surface. For further explanation of image coordinates, including illustrations, see Image Geometry.

The WPS1 *calibration parameters* are geometric characteristics of the WPS1 expressed in mount coordinates. Each WPS1 camera has nine calibration constants, which are the values of its nine calibration parameters. The first three are *pivot.x*, *pivot.y*, and *pivot.z*. These give the mount coordinates of the camera pivot point. The next three are *sensor.x*, *sensor.y*, and *sensor.z*. These give the mount coordinates of the center of the image sensor. The center is the point that corresponds to image coordinate point (1220 μm, 1720 μm). The final three coordinates are *rot.x*, *rot.y*, and *rot.z*. These give the rotation of the image sensor (which we also call the *CCD*) about the mount coordinate *x*, *y*, and *z* axes. These three rotations are all zero when the mount coordinate *x*-axis is perpendicular to the image sensor surface and the image coordinate *y*-axis is parallel to and in the same direction as the mount coordinate *z*-axis. Positive rotation about a mount coordinate axis is such that it would move a right-handed screw in the positive axis direction.

What we call the *camera axis* is the line from the center of the image sensor (the *CCD center*) to the pivot point. As you can see above, the nominal value of *rot.z* is −31° for Camera 1 and +31° for Camera 2. The nominal value of *rot.y* is zero. Both these rotations will be correct by construction to within ±20 mrad, and each has only a second-order effect upon the WPS1 measurement. The *rot.x* parameter is nominally −90° for Camera 1 and +90° for Camera 2. By construction, these rotations will be within ±10 mrad of nominal. They have a first-order effect on WPS1 measurement.

The nominal calibration constants for Camera 1 and 2 are as follows, in the order we present them above. We express angle parameters in milliradians and length parameters in millimeters.

WPS1_1 -4.500 87.400 -5.000 -14.272 93.271 -5.000 -1570.796 0.000 -541.000 WPS1_2 -4.500 37.400 -5.000 -14.272 31.529 -5.000 1570.796 0.000 541.000

These nominal calibration constants place the center of the WPS1 field of view at mount coordinate position (37.1 mm, 62.4 mm, −5 mm).

Another way to represent the calibration constants is to subtract the nominal values and leave only the deviations from nominal values. In our initial presentation of calibration constants to CERN, we subtracted the nominal rotations from *rot.x*, *rot.y*, and *rot.z*, so that the nominal calibration of each camera came out as:

WPS1_1 -4.500 87.400 -5.000 -14.272 93.271 -5.000 0.000 0.000 0.000 WPS1_2 -4.500 37.400 -5.000 -14.272 31.529 -5.000 0.000 0.000 0.000

To convert from these constants to the absolute constants, you have to know the nominal rotations for each type of camera, and which type of camera each set of parameters corresponds to.

We show elsewhere how the WPS1 can measure the position of steel pins with accuracy of order 1 μm, although we note that reflections of the ground surface of steel pins confuse the edge-finding analysis. We must raise the analysis threshold from "10 #" to at least "30 #" to get reliable results, and even then, we are not sure if the reflection has a systematic affect upon the apparant edge location.

Nevertheless, a ground steel pin is straight, stiff, and round, with a diameter known to within a few microns. A 1/16" (1.58 mm) diameter pin is large enough for our CMM to measure. With a black coating, we may be able to eliminate the reflections, and so create a near-perfect reference wire.

The following photograph shows our WPS1 *calibration stand*, which implements WPS1 calibration with a steel pin, a micrometer stage, and a CMM.

The steel pin has its own back-light with an LED array and an opal glass diffuser. We use this back-light because it allows us to calibrate the WPS1 with its lid removed. When the lid is removed, it is easy for us to hold a short pin in the field of view with a simple U-bracket.

We measure the pin position with the CMM. To allow the CMM probe to approach the pin, we remove the back-light. We measure the WPS1 mounting balls. We remove the WPS1 to allow the CMM probe to touch the mounting balls. We calculate the pin position in mount coordinates.

We measure the three reference balls on the micrometer stage. Our initial measurement of the mounting balls and reference balls allows us determine the mounting ball positions from any future reference ball positions.

We mount the WPS1 and take images of the pin. We move the micrometer stage and re-measure the reference balls. We calculate the mounting ball positions. The pin is in the same place. We calculate its position in the new mount coordinates. We take image with the WPS1. And so we proceed with new positions of the micrometer stage. Each step is a horizontal movement of the WPS1 with respect to the wire. The movie below shows one step.

When the pin has moved from one side of the WPS1 field of view to the other, we raise the pin with a vertical micrometer and re-measure its position. We WPS1 horizontally so that the pin appears to move through its field of view again. We move the pin once more, this time giving it a 200-mrad inclination to the horizontal, measure its position and direction, and execute a few more calibration steps.

At the end, we have *N* pin positions in mount coordinates, generated by the CMM program. In our first calibrations, we had *N*=12. Each wire position is a point in the wire and a vector along the wire, as well as a measurement of the wire diameter. We have *N* sets of edge positions from the WPS1 images. Each set of positions is a single line of text containing eight numbers. Each edge receives a position and rotation on the image.

Our calibration software transforms these *N* wire positions and the *N* sets of four edge positions into calibration constants for Camera 1 and Camera 2.

Before we go about calculating calibration constants, we need a way of measuring the calibration error. The calculation will minimize this error. Each WPS consists of two cameras, and both cameras are required to determine the position and orientation of a wire. Each camera defines a wire plane. The intersection of the wire planes is the WPS measurement of the wire's center-line.

Given the image of a wire in a camera, and given values for the nine calibration parameters of the camera, we can calculate the wire plane. During calibration, we know where the wire really is. So the distance between the wire plane and the wire is a measure of the error in our calibration parameters. But we cannot use the shortest distance between the wire plane and the wire center line as our measure. Unless the wire is parallel to the plane, this distance will be zero. The wire center line will intersect the wire plane somewhere. But suppose we pick two points on the center of the wire in the camera image, one towards the top of the image and one towards the bottom. Each of these points, together with the pivot point of the camera, defines a ray. This ray will pass near the wire center. The shortest distance between the ray and the wire is what we call a *ray error*.

We don't have to use only the center of the wire image and the center of a wire to determine a ray error. We could also use the left edge of a wire and the circumference of the wire. Our calibration code supports the *left edge ray error*, the *right edge ray error*, and the *center line ray error*. We end up using the center line ray error most of all, so when we say *ray error* we mean the center line ray error.

For each image taken by a camera during calibration, we obtain two ray errors. The root mean square ray error for all images taken by this camera is the *ray calibration error*. We calculate the calibration error with the *error* routine in calib_calc_6.pas, the most recent version of our calibration program. This code supports the left and right edge ray errors also, but we use these only for diagnostic purposes. The center line ray error is better because we get to use both edges of the wire image to determine the center line.

With the ray calibration error, we are able to calibrate each camera independently. We adjust the camera parameters until we obtain the smallest possible ray calibration error. The final parameters are our calibration constants.

Once we obtain our calibration constants, we can use them to measure the center-lines of the wires in the calibration process. We can compare these measurements to the center-lines measured by the CMM. We cannot use the shortest distance between the center lines as our comparison because the shortest distance may occur far outside the field of view of the WPS. But suppose we pick the *xy* plane at *z* = −5, which is near the center of the field of view of the WPS1, and we intersect the center-lines with this plane. Now we have a point on the center of the wire from the CMM and from the WPS. The distance from the WPS measured point to the CMM measured point is what we call the *line error*. The root mean square line error for all wire positions is the *line calibration error*. The line calibration error is insensitive to the rotation of wires about *z* = −5. But it is a good consistency check for our WPS1 calibrations.

Our calibration program is written in Pascal. Most versions work by adjusting the camera calibration constants so as to minimize the ray calibration error. You will find our routines in wps.pas and the various versions of the progarm in the text below.

[26-JUN-08] We worked on calibration data we obtained from Q0131_1 (WPS number Q0131, camera 1) using calib_calc_1.pas. The calib_calc_1.pas program makes small, random disturbances to the camera parameters and accepts these changes if and only if the calibration error is less for the new values. We found this method superior to a steepest descent routine. The error manifold contains long, thin valleys that slow down the steepest descent.

This procedure calculates the ray calibration error using only one point per image instead of two. We can use left edges of wires, right edges, or wire centers, but we obtain roughly the same results from all of them. Each wire image produces one piece of information: the x-coordinate of a point in the image. Because the procedure ignores the height of the image, it is not sensitive to rotation.x. The wires themselves we implement as three-dimensional objects using the CMM measurements.

We tried adjusting various subsets of the camera parameters. We found we had to keep pivot.z and rotation.x fixed. These two parameters are not constrained by our data. The pivot.z is not constrained because we do not have wires that slope up as well as down with *z*. The rotation.x is not constrained because we treat the wires as points on the CCD instead of lines.

We worked with the data of Q0131_1. We rejected data point 1 because the wire image was off the screen. We rejected data point 9 because the CMM measurement is a repeat of the measurement for data point 8. After rejecting these two points, we are left with ten calibration data points. We ran our minimization routine hundreds of times with ten thousand iterations. The calibratioin error never dropped below 10 μm, no matter what subset of the camera parameters we fitted or fixed, and no matter whether we used left edges, centers, or right edges.

[12-DEC-08] We return to the calibration problem with calib_calc_2.pas. The new program file uses the same fitting algorithm. We fit pivot.x and pivot.y, but not pivot.z. We fit sensor.x, sensor.y, and sensor.z. We disturb the initial values of these positions by a random ±0.5 mm before we begin our fit. We fit rotation.z also, but we do not disturb it before the fit. We keep rotation.x fixed because our procedure is not sensitive to rotation.x. We fix rotation.y because we know that it is within a few milliradians of zero by construction. We are fitting six parameters and we have ten measurements.

We ran the fit on the Q0131_1 data with 1M iterations using wire centers. For each wire we obtain its center position by taking the average of its left and right edges. After 1M iterations the calibration error was 3 μm. The fit took ten minutes. The calibration error settled to 3 μm after the first 200k iterations. The following figure shows the Q0131_1 ray errors at the end of the fit.

We performed our non-deterministic fit with 200k iterations ten times. The following table summarizes our results.

The average pivot-ccd distance is 11.9 mm, which we compares well enough to the 11.4 mm we expected from our measurement of the optics. When we use the average values of the calibration constants, we get a calibration error of 4 μm.

[17-DEC-08] We use left edges instead of wire centers. We run the fitting routine with 200k iterations. The calibration error is 4 μm. We use the left edge of data point 1, so now we have eleven data points in our fit. (We can't use the right edge or the center of point 1 because the right edge of the wire image is off the screen.) The calibration increases slightly to 5 μm. For a graph of the errors on the eleven points, see here. We moved on to Q0131_2. We have to skip point 9, but with the remaining 11 points, we fit six parameters and obtain a calibration error of 6 μm (see here).

[18-DEC-08] We use left edges and eleven points to calculate the parameters of Q0130_1 and Q0130_2. We obtain calibration errors of 4 μm and 6 μm respectively. For error plots see Q0130_1 and Q0130_2.

[17-FEB-09] We switch to a black-anodized steel pin in our calibration stand. There is no sign of reflection off the surface of the pin. This makes our analysis more robust, and allows us to obtain a wider range of motion during calibration.

We obtain 22 calibration points for two wire angles using Q0129, a WPS1-A. We calibrate using wire centers and all 22 points. The calibration includes two pin angles, which constrains our pivot.z parameter. We fit pivot.x, pivot.y, pivot.z, sensor.x, sensor.y, sensor.z, and rotation.z. Instead of fitting by random steps, as we did before, we now implement a downhill simplex fitting routine (Nelder-Mead Method). You will find the simplex code in calib_calc_3.pas.

We obtain rayy calibration error 3 μm with both Q0129_1 and Q0129_2 using the centers or the left edges. With the right edges, our error rises to 4 μm. The table below gives the calibration constants we obtained from repeated fits from random starting points using the wire centers. The simplex fitting routine takes one or two thousand iterations to converge to 3 μm. Our previous random-step method, when applied to the same data, converged only to 6 μm after 200k iterations.

---------------------------------------------------------------------------------------- Iter- pivot (mm) sensor (mm) rot (mrad) pivot- error ations x y z x y z x y z ccd (mm) (mm) ---------------------------------------------------------------------------------------- 1854 -7.035 89.782 -3.538 -17.219 95.838 -3.830 -1570.796 0.000 -551.401 11.852 0.003 1612 -7.035 89.782 -3.538 -17.219 95.838 -3.830 -1570.796 0.000 -551.402 11.852 0.003 1411 -7.035 89.782 -3.538 -17.219 95.838 -3.830 -1570.796 0.000 -551.401 11.852 0.003 1924 -7.035 89.782 -3.538 -17.219 95.838 -3.830 -1570.796 0.000 -551.401 11.852 0.003 1716 -7.035 89.782 -3.538 -17.219 95.838 -3.830 -1570.796 0.000 -551.402 11.852 0.003 1716 -7.035 89.782 -3.538 -17.219 95.838 -3.830 -1570.796 0.000 -551.402 11.852 0.003 ----------------------------------------------------------------------------------------

As you can see, the fit converges to the same values within a micron or so. When we use left and right edges, we obtain different constants.

---------------------------------------------------------------------------------------- Edges pivot (mm) sensor (mm) rot (mrad) pivot- error Used x y z x y z x y z ccd (mm) (mm) ---------------------------------------------------------------------------------------- Left -7.171 89.861 -3.502 -17.388 95.938 -3.790 -1570.796 0.000 -533.399 11.891 0.003 Right -6.981 89.755 -3.581 -17.130 95.790 -3.879 -1570.796 0.000 -569.330 11.812 0.004 Center -7.035 89.782 -3.538 -17.219 95.838 -3.830 -1570.796 0.000 -551.401 11.852 0.003 ----------------------------------------------------------------------------------------

[26-FEB-09] We improve the convergance criteria of our simplex fitting routine and expand it to fit all nine of our calibration parameters. We incorporate the rotation of wire images into our error calculation by representing each wire image with two points: one towards the top of the CCD and one towards the bottom. Thus we obtain the full ray calibration error we defined above. These two points each define a line through the camera pivot point, and we calculate the distance between this line and the wire. With 22 wire positions, we have 44 image points involved in our error calculation.

We find that we must fit rot.x and rot.y together in order to reduce the calibration error to 3 μm again. It appears that the rotation about the *y*-axis is real. When fitting all nine parameters from random starting points, the fitting routine converges in roughly five thousand iterations, which takes twenty seconds on our 1-GHz iBook G3. When we repeat the fit ten times, we get the same result to within 1 μm and 1 μrad.

---------------------------------------------------------------------------------------- Edges pivot (mm) sensor (mm) rot (mrad) pivot- error Used x y z x y z x y z ccd (mm) (mm) ---------------------------------------------------------------------------------------- Left -7.180 89.867 -3.545 -17.398 95.946 -3.843 -1572.698 38.660 -533.280 11.893 0.003 Right -6.985 89.759 -3.634 -17.134 95.795 -3.944 -1573.439 27.636 -569.372 11.813 0.004 Center -7.042 89.787 -3.590 -17.226 95.844 -3.894 -1573.266 33.136 -551.365 11.853 0.003 ----------------------------------------------------------------------------------------

We see that the addition of rot.x and rot.y to the fit moves the calculated pivot and senor positions by less than 10 μm, and rot.z changes by less than 100 urad. The differences between the right, left, and center calculations remain intact.

---------------------------------------------------------------------------------------- Edges pivot (mm) sensor (mm) rot (mrad) pivot- error Used x y z x y z x y z ccd (mm) (mm) ---------------------------------------------------------------------------------------- Left -7.096 37.487 -3.963 -17.504 31.000 -3.926 1568.053 66.902 523.649 12.264 0.005 Right -6.845 37.673 -4.094 -17.201 31.229 -4.092 1570.069 58.633 547.455 12.197 0.006 Center -6.936 37.604 -4.029 -17.316 31.139 -4.009 1569.173 62.729 535.665 12.229 0.005 ----------------------------------------------------------------------------------------

Our calibration of Camera 2 has error 5 μm. We see a 250-μm difference in pivot.x between the our use of left edges and our use of right edges. As with Camera 1, the right edges appear to be less accurate than the left edges. We apply the simplex fitting with nine parameters to Q0130 and Q0131. We move the simplex routines into utils.pas. You will find the abbreviated code with embedded data for three sensors in calib_calc_4.pas.

[04-MAR-09] We now attempt to calibrate both cameras at the same time. We have two ways to calculate the calibration error. The first is to add the ray calibration error from each camera in quadrature. The second is to use an enhanced line calibration error. As we have said before, the intersection of wire planes from two cameras is the WPS-measured center-line of the wire. If we compare this WPS-measured center-line to the CMM-measured center-line at two *z*-coordinates, the result is an enhanced line calibration error that is sensitive to wire rotation. Our calib_calc_5.pas program lets us choose between these two calibration errors, and fits all eighteen WPS calibration parameters at the same time.

The simplex fitter converges after 100,000 iterations in the case of the enhanced line calibration error, and has not converged after 200,000 iterations with the combined ray calibration error. Our simplex fitter appears to be confused by the two independent sets of parameters that contribute to the combined ray calibration error. But even with the line calibration error, the final parameters vary significantly from one fit to the next.

--------------------------------------------------------------------------- pivot (mm) sensor (mm) rot (mrad) error x y z x y z x y z (mm) --------------------------------------------------------------------------- -5.313 88.777 -3.060 -15.077 94.589 -3.243 -1574.742 38.744 -587.368 0.008 -5.778 89.034 -2.879 -15.658 94.910 -3.022 -1574.327 38.785 -576.398 0.007 -6.091 89.225 -3.146 -16.045 95.146 -3.350 -1574.263 38.681 -574.408 0.008 ---------------------------------------------------------------------------

We take the dual camera calibration and check it with a TCL script we can run in the LWDAQ Toolmaker. The script is called calib_check_1.tcl. We compare the WPS wire position to the CMM wire position at a single *z*-coordinate, and do this for all wire positions. That is to say, we calculate the line calibration error. We perform the same calculation at the end of our calib_calc_5.pas execution (in the cases where it converges), and we compare the two sets of errors, which should be identical. They are not: it turns out that three decimal places in our calibration constants are insufficient. So we switch to four decimal places for the calibration constants and try again. Now the errors agree to within ±1 μm.

When we fit all eighteen parameters at once by minimizing the enhanced line calibration error, we reach a final calibration error of 8 μm most of the time, sometimes 7 μm. Both calib_check_1.tcl and calib_calc_5.pas agree upon the total error and the individual errors for each wire position. When we fit the nine parameters of each camera separately by minimizing the ray calibration error for each camera, we arrive at a final line calibration error of 7 μm, and our fitting routine converges upon the same final values to within 1 μm.

We conclude that our best calibration calculation is to fit the parameters of the two cameras separately, and use the ray calibration error. By this means, we obtain an absolute calibration accuracy of 7 μm across the field of view of a WPS1-A. As we discuss in Aberration and Distortion, we suspect that the WPS1-A optics intruduce errors of up to 20 μm at the edges of the field of view. We now calibrate a WPS1-B and find that it's accuracy is far superior to that of the WPS1-A. We report in the next section.

[12-MAR-09] We calibrated P0195, our first WPS1-B. We determine the calibration constants for each camera separately using the ray calibration error. The ray calibration error of both cameras is 1 μm. For the ×100 ray errors for P0195_1, see here. The line calibration error of the entire device is 2 μm. We show the line errors for each wire position below.

We determine 9 calibration constants for each camera using images of 22 wire positions. We have over twice as many wire positions as we need to fit our parameters.

**Detail:** We can calculate the camera calibration constants using only the left edges of the wire images, or only the right edges, or by combining the two. We find that the constants we obtain using only the left or the right edges give us poorer line calibration error: 12 μm for right edges on P0195 and 11 μm for left edges. We're not sure why the single-edge calculation is so inferior for these cameras, but there may be a bug in our implementation. We obtain our 2-μm line calibration error using the centers of the wire images.

We calibrate P0195 again and re-calculate the calibration constants. We refer to the first calibration as *A* and the second as *B*. The table below gives the constants we determined from each calibration. We use our new calib_calc_6.pas to read data files automatically. We have calib_extract_1.tcl to extract the CMM measurements from the CMM output file. We use calib_check_1.tcl to determine the line calibration error of a set of calibration constants.

-------------------------------------------------------------------------------------------------- pivot (mm) sensor (mm) rot (mrad) pivot- error Camera x y z x y z x y z ccd (mm) (mm) -------------------------------------------------------------------------------------------------- P0195_A_1 -4.3892 88.4846 -4.4033 -13.7607 93.7637 -4.3873 -1577.741 -0.008 -493.211 10.756 0.001 P0195_B_1 -4.3073 88.4222 -4.1131 -13.6644 93.6896 -4.0386 -1577.685 0.436 -495.197 10.738 0.001 P0195_A_2 -3.8191 39.3077 -4.6536 -12.7098 33.5709 -4.7217 1562.642 -1.805 573.494 10.581 0.001 P0195_B_2 -3.8608 39.3033 -4.3716 -12.7653 33.5628 -4.3823 1562.571 -2.101 573.215 10.594 0.001 --------------------------------------------------------------------------------------------------

As you can see, the pivot position differs by roughly 100μm. We took the P0195_A constants and applied them to the measurements of P0195_B. Our line calibration error was 3 μm. We took the P0195_B constants and applied them to the measurements of P0195_A. The line calibration error was once again 3 μm.

[17-AUG-10] Our collaborators at CERN dropped P0199, breaking off P0199_1 (camera 1 of device P0199). We repaired the top camera and re-calibrated both cameras.

-------------------------------------------------------------------------------------------------- pivot (mm) sensor (mm) rot (mrad) pivot- error Camera x y z x y z x y z ccd (mm) (mm) -------------------------------------------------------------------------------------------------- P0199_A_1 -3.0807 90.0282 -4.1893 -11.7775 95.4612 -4.1093 -1573.379 12.464 -554.912 10.255 1.0 P0199_B_1 -3.3354 89.1019 -4.1875 -12.0084 94.5839 -4.1194 -1573.383 11.792 -561.162 10.261 0.9 P0199_A_2 -4.2113 39.6984 -4.1309 -13.1938 34.3032 -4.0849 1571.324 -0.426 519.343 10.478 0.7 P0199_B_2 -4.2923 39.6474 -4.3700 -13.2957 34.2403 -4.3719 1570.804 -1.029 520.598 10.502 1.1 --------------------------------------------------------------------------------------------------

The line calibration error for P0199_B (calibration B of P0199) is 1.5 μm. We obtain this error by applying the P0195_B_1 and P0195_B_2 constants to the measurements of P0199_B. When we apply the P0199_B_1 and P0199_A_2 constants to the same measurements, the line calibration error rises to 5.3 μm. The average line error in *x* and *y* is −4 μm and −2 μm respectively. It appears that dropping P0199 not only broke off P0199_1, but also caused a 5-μm move in the center of P0199_2's field of view.

Our collaborators at CERN return P0195. They believe the calibration constants have changed. We re-calibrate P0195, generating calibration P0195_D. (We abandoned calibration P0195_C because of errors.) The ray calibration error is below 2 μm for both cameras. The line calibration error is 3.1 μm. We have to skip the fifth from last calibration point because the P0195_1 image was leaving the screen, but in calibrations P0195_A and P0195_B, the P0195_1 images at this position were well within the field of view. We apply the P0195_D_1 and P0195_D_2 calibration constants to the P0195_B measurements. The average error in *x* and *y* is −870 μm and −510 μm respectively. We apply the P0195_D_1 and P0195_B_2 constants to the P0195_D measurements and obtain line calibration error of only 4.2 μm. The old P0195_B_2 constants are still valid. But the P0195_B_1 constants are off by almost a millimeter.

We conclude that the P0195_1 camera broke off some time between calibration P0195_B and calibration P0195_D. We suspect that we glued the camera back on here, but did not re-calibrate, and so we never realised that the field of view was not quite right.

[31-AUG-10] We reposition P0195_1 and re-calibrate. We now obtain ray calibration error 1.6 μm for both cameras, and line calibration error 1.9 μm. But upon further inspection of the calibration constants we find that the top camera is 4 mm out of its nominal position in the x-direction. Because the device works well, and is calibrated well, we decide not to break off the top camera to put it in the nominal position.

[02-SEP-10] The lower camera of P0199 falls of as we are packing it up to ship back to CERN. We remove both cameras and re-glue them. This time we use DP460, a 24-hour epoxy. We place both cameras with lines scribed on the end wall rather than by capturing images. We propped up the lense holders with shims. The next day we tested the field of view of both cameras and found them to be near-perfect in the *x*-direction on the image sensor, but sligthly off in the *y*-direction because the shims were slightly too thick. We assemble the device and give it to Jim to calibrate again. We also reinforce the camera mounting of P0195 with a bead of DP460 around the base.

It appears that WPS1 calibration is stable to a few microns over a year or two, provided we don't drop the device. The top camera sticks out and is vulnerable to impact. Three of them have come off so far. When we drop a WPS1, the calibration of the lower camera appears change by a few microns.

Here we present the most recently-measured calibration constants for the existing WPS1s. In addition to the nine constants, we give the pivot-ccd distance for each camera and the camera's calibration error. We calculate the pivot-ccd distance from the calibrated pivot and sensor positions. The error is the *ray error* for the camera and its calibration pin positions (see above for definitions and details).

We use calib_extract_1.tcl to combine the CMM and WPS calibration measurements into a single data file. We use calib_calc_6.pas to read this data file and determine the calibration constants. We later use calib_check_1.tcl to determine the calibration error of the two cameras acting together. If we need to re-calculate the wire edge positions in the image we use calib_reanalyze_1.tcl (LWDAQ 7.5 and earlier) or calib_reanalyze_2.tcl (LWDAQ 7.6 and later).

------------------------------------------------------------------------------------------------ pivot (mm) sensor (mm) rot (mrad) pivot- error Camera x y z x y z x y z ccd (mm) (um) ------------------------------------------------------------------------------------------------ P0195_1 -8.0503 91.8587 -4.2477 -17.2217 97.4737 -4.2104 -1577.398 -0.325 -533.494 10.754 1.6 P0195_2 -3.8649 39.2839 -4.3795 -12.7663 33.5418 -4.3931 1562.686 -1.550 572.270 10.593 1.6 P0197_1 -3.7906 89.4672 -3.8999 -12.5781 94.6556 -3.8052 -1575.547 14.727 -537.395 10.205 1.2 P0197_2 -3.3961 38.2920 -4.5059 -12.2748 32.8203 -4.5708 1574.446 7.187 546.390 10.430 1.5 P0198_1 -3.0843 90.1940 -4.2425 -11.9576 95.7197 -4.3450 -1575.744 0.437 -541.792 10.454 1.2 P0198_2 -3.7644 38.9943 -4.6077 -12.7347 33.4335 -4.6656 1567.472 -2.328 551.404 10.554 1.3 P0199_1 -4.0176 88.0416 -4.4290 -12.7107 93.3821 -4.0536 -1573.817 38.910 -547.634 10.209 1.2 P0199_2 -4.4658 39.4894 -4.4051 -13.4677 34.0853 -4.1260 1571.587 20.234 519.217 10.503 1.9 P0200_1 -3.7885 89.4043 -4.2377 -12.5270 94.9308 -4.2667 -1567.298 10.040 -556.169 10.339 1.6 P0200_2 -4.2151 38.6110 -4.5358 -13.2755 33.1151 -4.5946 1572.835 8.406 525.869 10.597 1.9 P0201_1 -3.7992 89.0629 -4.0823 -12.6996 94.3538 -4.1472 -1569.350 11.913 -532.884 10.354 1.5 P0201_2 -4.1684 38.7802 -4.1355 -13.1010 33.2285 -4.2102 1560.343 15.907 547.316 10.518 1.3 P0202_1 -3.9688 89.2693 -4.3937 -12.8662 94.7569 -4.2628 -1568.482 14.449 -540.951 10.454 1.5 P0202_2 -4.4135 39.0829 -4.2892 -13.4683 33.8120 -4.3727 1573.235 2.048 514.979 10.477 1.5 P0203_1 -3.0524 89.2967 -4.3284 -11.8453 94.7261 -4.3051 -1573.151 7.914 -543.224 10.334 1.9 P0203_2 -3.4665 38.0783 -4.1433 -12.3490 32.5047 -4.2011 1573.072 -6.642 538.407 10.486 1.6 P0222_1 -3.2506 88.2492 -4.5628 -12.3277 93.8891 -4.4901 -1568.477 4.154 -581.213 10.687 2.1 P0222_2 -4.7831 38.5881 -4.5009 -13.5001 33.2596 -4.3538 1570.995 28.621 528.012 10.218 1.4 P0223_1 -3.8841 87.8976 -4.2084 -12.9706 93.3465 -4.1088 -1571.456 15.510 -556.602 10.596 1.2 P0223_2 -4.5310 40.0608 -4.3034 -13.7758 34.5910 -4.5274 1574.408 -1.478 520.011 10.744 1.5 P0224_1 -4.2213 87.7491 -4.6937 -13.2627 93.3834 -4.5124 -1569.469 14.796 -536.644 10.655 1.6 P0224_2 -4.5677 39.6968 -4.6057 -13.9320 34.2023 -4.8243 1579.873 -0.778 517.847 10.860 2.0 P0225_1 -3.1255 88.0477 -4.5187 -12.1260 93.5160 -4.6606 -1581.139 -2.690 -555.326 10.532 1.3 P0225_2 -4.1338 38.9178 -4.4174 -13.2475 33.4272 -4.2957 1582.116 23.001 530.661 10.641 1.1 Q0129_1 -5.1326 89.5092 -4.7955 -14.2253 94.9853 -4.6239 -1573.462 19.096 -553.251 10.616 1.8 Q0129_2 -5.0402 38.8200 -4.2803 -14.0014 33.1804 -4.0978 1567.728 19.874 564.146 10.590 1.2 Q0130_1 -5.0285 88.6823 -1.8141 -15.7230 94.9590 -1.3438 -1567.144 -35.132 -510.121 12.409 6.5 Q0130_2 -2.0807 39.9298 -6.0488 -11.8436 34.2353 -6.7620 1568.044 -0.141 652.405 11.325 6.1 Q0131_1 -5.6082 89.6961 -2.9988 -16.1144 96.4313 -2.7459 -1576.227 5.898 -519.091 12.482 3.1 Q0131_2 -2.4564 40.7047 -4.6130 -12.0240 35.1758 -5.2505 1584.573 39.607 663.654 11.069 2.2 Q0132_1 -4.4475 87.6752 -4.0442 -14.6304 93.6529 -3.9048 -1574.944 1.036 -638.629 11.809 3.1 Q0132_2 -4.1223 37.6675 -4.9617 -14.3354 31.3532 -4.6422 1578.667 -23.815 537.598 12.012 3.5 ------------------------------------------------------------------------------------------------

When we combine both cameras to measure the calibration pin positions, we arrive at the *line calibration error*. In each case, we find the line calibration error is close to the sum of the two ray calibration errors. The line calibration error for P0199 is 1.3 μm calculated over 22 pin positions, while that for Q0130 is 13 μm calculated over 11 pin positions. Device Q0132 could not see both edges of the pin in positions 1, 4, 19, and 22 of the extended calibration procedure, so we calculated its parameters using the remaining eighteen positions. Devices Q0130, Q0131, and Q0132 are all WPS1-As.

The line calibration error of the WPS1-B varies from 1.3 μm to 2.5 μm. That of the WPS1-A varies from 4.5 μm to 13 μm. We see that the WPS1-B optics do indeed improve the accuracy of the instrument. Furthermore, all pin positions are visible to all WPS1-Bs, which shows that the camera fields of view are more consistent. Camera Q0129 is our first WPS1-D with 500-μm apertures. It's line calibration error is 2.3 μm.

Our calibration procedure is conceptually simple: it relies only upon a CMM. No complex calibration pieces are necessary. We obtain absolute calibration accuracy of 3 μm across a 7 mm × 12 mm area using our WPS1-B optics, and 7 μm using our WPS1-A optics. When we increase the aperture diameter to 500 μm so as to give us sharp, bright images with the white Vectran wire, we obtain calibration accuracy of 2 μm.

We now have a growing database of WPS1 calibration constants. The Acquisifier script called WPS_3.txt shows how to use the database to translate WPS results into wire planes.