176 const auto state0 = barrelAttachState();
177 const auto hit = barrelMeasurementFromHit(barrelAttachHit());
178 const auto material = barrelAttachMaterial();
181 float probeChi2 = 0.f;
185 BOOST_REQUIRE(attachMeasurement(probe, hit, material, BarrelAttachBz, probeChi2, permissive));
186 BOOST_REQUIRE_GT(probeChi2, 0.f);
188 auto accepted = state0;
189 float acceptedChi2 = 0.f;
192 BOOST_CHECK(attachMeasurement(accepted, hit, material, BarrelAttachBz, acceptedChi2, accept));
196 auto rejected = state0;
197 float rejectedChi2 = -1.f;
198 const auto before = rejected;
199 const float chi2Before = rejectedChi2;
202 BOOST_CHECK(!attachMeasurement(rejected, hit, material, BarrelAttachBz, rejectedChi2, reject));
210 const auto state0 = barrelAttachState();
217 const auto before =
state;
218 const float chi2Before =
chi2;
220 BOOST_CHECK(!attachMeasurement(
state, measurement, material, BarrelAttachBz,
chi2, permissive));
228 auto farHit = barrelAttachHit();
229 farHit.alphaTrackingFrame = state0.alpha + 3.f;
230 checkFailure(barrelMeasurementFromHit(farHit), barrelAttachMaterial());
235 auto farHit = barrelAttachHit();
236 farHit.xTrackingFrame = -50000.f;
237 checkFailure(barrelMeasurementFromHit(farHit), barrelAttachMaterial());
279 auto first = barrelAttachState();
280 auto second = barrelAttachState();
281 float chi2First = 0.f;
282 float chi2Second = 0.f;
286 BOOST_REQUIRE(attachMeasurement(
first, barrelMeasurementFromHit(barrelAttachHit()), barrelAttachMaterial(), BarrelAttachBz, chi2First, permissive));
287 BOOST_REQUIRE(attachMeasurement(second, barrelMeasurementFromHit(barrelAttachHit()), barrelAttachMaterial(), BarrelAttachBz, chi2Second, permissive));
298 const auto state0 = diskAttachState();
299 const auto hit = diskAttachMeasurement();
300 const auto material = diskAttachMaterial();
303 float probeChi2 = 0.f;
307 BOOST_REQUIRE(attachMeasurement(probe, hit, material, DiskAttachBz, probeChi2, permissive));
308 BOOST_REQUIRE_GT(probeChi2, 0.f);
310 auto accepted = state0;
311 float acceptedChi2 = 0.f;
314 BOOST_CHECK(attachMeasurement(accepted, hit, material, DiskAttachBz, acceptedChi2, accept));
318 auto rejected = state0;
319 float rejectedChi2 = -1.f;
320 const auto before = rejected;
321 const float chi2Before = rejectedChi2;
324 BOOST_CHECK(!attachMeasurement(rejected, hit, material, DiskAttachBz, rejectedChi2, reject));
332 const auto state0 = diskAttachState();
339 auto zeroTanl = state0;
340 zeroTanl.parameters[3] = 0.f;
341 auto hit = diskAttachHit();
342 hit.zCoordinate = -60.f;
343 const auto measurement = diskAttachMeasurementFrom(hit);
344 auto state = zeroTanl;
346 const auto before =
state;
347 const float chi2Before =
chi2;
349 BOOST_CHECK(!attachMeasurement(
state, measurement, diskAttachMaterial(), 0.f,
chi2, permissive));
358 auto noLossMaterial = diskAttachMaterial();
359 noLossMaterial.arealDensityGPerCm2 = 0.f;
360 auto withLossMaterial = diskAttachMaterial();
362 auto stateNoLoss = diskAttachState();
363 auto stateWithLoss = diskAttachState();
364 const auto hit = diskAttachMeasurement();
365 float chi2NoLoss = 0.f;
366 float chi2WithLoss = 0.f;
370 BOOST_REQUIRE(attachMeasurement(stateNoLoss, hit, noLossMaterial, DiskAttachBz, chi2NoLoss, permissive));
371 BOOST_REQUIRE(attachMeasurement(stateWithLoss, hit, withLossMaterial, DiskAttachBz, chi2WithLoss, permissive));
372 BOOST_CHECK_NE(stateNoLoss.parameters[4], stateWithLoss.parameters[4]);
377 auto first = diskAttachState();
378 auto second = diskAttachState();
379 float chi2First = 0.f;
380 float chi2Second = 0.f;
384 BOOST_REQUIRE(attachMeasurement(
first, diskAttachMeasurement(), diskAttachMaterial(), DiskAttachBz, chi2First, permissive));
385 BOOST_REQUIRE(attachMeasurement(second, diskAttachMeasurement(), diskAttachMaterial(), DiskAttachBz, chi2Second, permissive));
397 const auto state0 = barrelAttachState();
398 auto lowCrossTerm = barrelAttachHit();
399 lowCrossTerm.covarianceTrackingFrame[1] = 0.f;
400 auto highCrossTerm = barrelAttachHit();
401 highCrossTerm.covarianceTrackingFrame[1] = 0.03f;
403 auto stateLow = state0;
404 auto stateHigh = state0;
406 float chi2High = 0.f;
410 BOOST_REQUIRE(attachMeasurement(stateLow, barrelMeasurementFromHit(lowCrossTerm), barrelAttachMaterial(), BarrelAttachBz, chi2Low, permissive));
411 BOOST_REQUIRE(attachMeasurement(stateHigh, barrelMeasurementFromHit(highCrossTerm), barrelAttachMaterial(), BarrelAttachBz, chi2High, permissive));
412 BOOST_CHECK_NE(chi2Low, chi2High);
417 const auto state0 = diskAttachState();
418 const auto baseline = diskAttachHit();
420 auto varyingCrossTerm = baseline;
421 varyingCrossTerm.covarianceTrackingFrame[1] = 999.f;
423 auto varyingUnreadFields = baseline;
424 varyingUnreadFields.xTrackingFrame = 12345.f;
425 varyingUnreadFields.alphaTrackingFrame = 6.7f;
426 varyingUnreadFields.positionTrackingFrame = {-999.f, 999.f};
431 auto stateBaseline = state0;
432 float chi2Baseline = 0.f;
433 BOOST_REQUIRE(attachMeasurement(stateBaseline, diskAttachMeasurementFrom(baseline), diskAttachMaterial(), DiskAttachBz, chi2Baseline, permissive));
435 auto stateCrossTerm = state0;
436 float chi2CrossTerm = 0.f;
437 BOOST_REQUIRE(attachMeasurement(stateCrossTerm, diskAttachMeasurementFrom(varyingCrossTerm), diskAttachMaterial(), DiskAttachBz, chi2CrossTerm, permissive));
438 BOOST_CHECK(bitEqual(stateBaseline, stateCrossTerm));
441 auto stateUnreadFields = state0;
442 float chi2UnreadFields = 0.f;
443 BOOST_REQUIRE(attachMeasurement(stateUnreadFields, diskAttachMeasurementFrom(varyingUnreadFields), diskAttachMaterial(), DiskAttachBz, chi2UnreadFields, permissive));
444 BOOST_CHECK(bitEqual(stateBaseline, stateUnreadFields));