Repository navigation
Commit bab47b7
TPC: fix the weight and grid scaling of the spline derivatives in addCorrections (#15994)
* TPC: fix the weight scaling of the mixed spline derivative in addCorrections
TPCFastSpaceChargeCorrectionHelper::addCorrections scaled the 4th parameter of each spline knot (the mixed derivative d2S/dudv)
with the square of the weight: secMainScale * secMainScale for the main correction, ls * ls * ... for the added ones (ls is the
weight times the z fade-out factor, 1 at the knots). A spline is linear in its parameters, so scaling the correction by w scales all
of them by w.
The correction was therefore right at the knots but wrong between them whenever a weight != 1 was used, e.g. the derivative map
added with weight lumiScale in TPCScalerSpec::buildMap. The error is proportional to w - w^2. Measured with a production map and
the derivative map of run 568041 (random points, vs the weighted point-by-point sum of getCorrectionLocal and of the inverse
getters), for map + 0.13 x derivative: rms ~20 um in dx and dz, ~10 um without the first 10 pad rows; deviations above 100 um are
rare (0.4 % of the points) and lie mostly in the first pad rows. At a weight of -0.5 the rms is ~150 um (~60 um without the first
10 pad rows). With the fix the sum is exact to float precision (< 0.1 um) for weights from -1 to 1.5, inverse corrections
included; w = 1 is unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* TPC: fix the chain-rule grid factors in addCorrections
A correction added on a different spline grid is sampled at the main grid's knots, and its derivatives must be converted with the
chain rule: with u = (y - y0) * yScale, d/du_main = (yScale_corr / yScale_main) d/du_corr, the same for v. addCorrections used the
inverse ratios, and applied the u factor to the dS/dv parameter and the v factor to dS/du (knot parameters {S, dS/dv, dS/du,
d2S/dudv}).
For identical grids (e.g. the derivative map) the factors are 1 and nothing changes. The M-shape map is created on a 4 x 4 grid in
TPCScalerSpec, with factors of 35-98 with respect to a production map: adding the M-shape map of run 544797 (up to 6 mm) to a map of
run 568041 gave errors of up to 89 cm in dx and up to the kMaxCorrection limit of 100 cm in dy (rms 4 cm and 7 cm), vs the
point-by-point sum. With the fix: rms 1-2 um, max 60 um (resampling of non-nested grids) inside the main map's grid. Outside of it
(|z| > ~1.37 x for production voxel maps) the merged map follows the edge and z fade-out of the main grid, as before.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit a36f08c)
(cherry picked from commit f4d548e)1 parent 91453af commit bab47b7
1 file changed
Lines changed: 10 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1040 | 1040 | | |
1041 | 1041 | | |
1042 | 1042 | | |
1043 | | - | |
1044 | | - | |
| 1043 | + | |
| 1044 | + | |
1045 | 1045 | | |
1046 | 1046 | | |
1047 | 1047 | | |
| |||
1075 | 1075 | | |
1076 | 1076 | | |
1077 | 1077 | | |
1078 | | - | |
1079 | | - | |
1080 | | - | |
1081 | | - | |
| 1078 | + | |
| 1079 | + | |
| 1080 | + | |
| 1081 | + | |
| 1082 | + | |
1082 | 1083 | | |
1083 | 1084 | | |
1084 | 1085 | | |
| |||
1094 | 1095 | | |
1095 | 1096 | | |
1096 | 1097 | | |
1097 | | - | |
| 1098 | + | |
| 1099 | + | |
1098 | 1100 | | |
1099 | 1101 | | |
1100 | 1102 | | |
| |||
1110 | 1112 | | |
1111 | 1113 | | |
1112 | 1114 | | |
1113 | | - | |
| 1115 | + | |
1114 | 1116 | | |
1115 | 1117 | | |
1116 | 1118 | | |
| |||
0 commit comments