diff --git a/Framework/Beamline/test/ComponentInfoTest.h b/Framework/Beamline/test/ComponentInfoTest.h index b776f0bcb0aad7415b03112b9a4d5384abebc6c6..8b1ce7c2ed4add3ee2a8b850d8c94c1e1baa6c0f 100644 --- a/Framework/Beamline/test/ComponentInfoTest.h +++ b/Framework/Beamline/test/ComponentInfoTest.h @@ -942,15 +942,14 @@ public: } void test_merge_identical() { - auto infos1 = makeFlatTree(PosVec(1, Eigen::Vector3d(0, 0, 0)), - RotVec(1, Eigen::Quaterniond(Eigen::AngleAxisd( - 0, Eigen::Vector3d::UnitY())))); + auto pos = Eigen::Vector3d(0, 1, 2); + auto rot = + Eigen::Quaterniond(Eigen::AngleAxisd(0, Eigen::Vector3d::UnitY())); + auto infos1 = makeFlatTree(PosVec(1, pos), RotVec(1, rot)); ComponentInfo &a = *std::get<0>(infos1); a.setScanInterval({0, 10}); - auto infos2 = makeFlatTree(PosVec(1, Eigen::Vector3d(0, 0, 0)), - RotVec(1, Eigen::Quaterniond(Eigen::AngleAxisd( - 0, Eigen::Vector3d::UnitY())))); + auto infos2 = makeFlatTree(PosVec(1, pos), RotVec(1, rot)); ComponentInfo &b = *std::get<0>(infos2); b.setScanInterval({0, 10}); @@ -962,7 +961,10 @@ public: } void test_merge_identical_interval_when_positions_differ() { - auto infos1 = makeFlatTree(PosVec(1), RotVec(1)); + auto pos = Eigen::Vector3d(0, 1, -1); + auto rot = + Eigen::Quaterniond(Eigen::AngleAxisd(1, Eigen::Vector3d::UnitX())); + auto infos1 = makeFlatTree(PosVec(1, pos), RotVec(1, rot)); ComponentInfo &a = *std::get<0>(infos1); a.setScanInterval({0, 1}); Eigen::Vector3d pos1(1, 0, 0); @@ -986,7 +988,10 @@ public: } void test_merge_identical_interval_when_rotations_differ() { - auto infos1 = makeFlatTree(PosVec(1), RotVec(1)); + auto pos = Eigen::Vector3d(0, 1, 0); + auto rot = + Eigen::Quaterniond(Eigen::AngleAxisd(2, Eigen::Vector3d::UnitZ())); + auto infos1 = makeFlatTree(PosVec(1, pos), RotVec(1, rot)); ComponentInfo &a = *std::get<0>(infos1); a.setScanInterval({0, 1}); Eigen::Quaterniond rot1( @@ -996,6 +1001,7 @@ public: auto rootIndexA = a.root(); a.setRotation(rootIndexA, rot1); a.setPosition(rootIndexA, Eigen::Vector3d{1, 1, 1}); + a.setPosition(0, Eigen::Vector3d{2, 3, 4}); auto infos2 = cloneInfos(infos1); ComponentInfo &b = *std::get<0>(infos2); // Sanity check @@ -1006,6 +1012,7 @@ public: auto rootIndexC = c.root(); c.setRotation(rootIndexC, rot2); c.setPosition(rootIndexC, Eigen::Vector3d{1, 1, 1}); + c.setPosition(0, Eigen::Vector3d{2, 3, 4}); TS_ASSERT_THROWS_EQUALS(c.merge(a), const std::runtime_error &e, std::string(e.what()), "Cannot merge ComponentInfo: " @@ -1014,24 +1021,23 @@ public: } void test_merge_fail_identical_interval_but_component_positions_differ() { + auto pos0 = Eigen::Vector3d(1, 1, 1); + auto rot0 = + Eigen::Quaterniond(Eigen::AngleAxisd(0, Eigen::Vector3d::UnitY())); + auto infos1 = makeFlatTree(PosVec(1, pos0), RotVec(1, rot0)); // Now make a strange situation where the components have different // positions but detector positions are the same auto pos1 = Eigen::Vector3d{1, 0, 0}; auto pos2 = Eigen::Vector3d{1, 0, 3}; - auto rot = Eigen::Quaterniond{ - Eigen::AngleAxisd(5.0, Eigen::Vector3d{-1, 2, -3}.normalized())}; - - auto infos1 = makeFlatTree(PosVec(1), RotVec(1)); ComponentInfo &a = *std::get<0>(infos1); a.setScanInterval({0, 1}); a.setPosition(a.root(), pos1); - a.setRotation(a.root(), rot); - auto infos2 = cloneInfos(infos1); + a.setPosition(0, pos1); + auto infos2 = makeFlatTree(PosVec(1, pos0), RotVec(1, rot0)); ComponentInfo &b = *std::get<0>(infos2); + b.setScanInterval({0, 1}); b.setPosition(b.root(), pos2); - b.setRotation(b.root(), rot); - DetectorInfo &c = *std::get<1>(infos2); - c.setPosition(0, pos1); + b.setPosition(0, pos1); // same as a's detector position TS_ASSERT_THROWS_EQUALS(b.merge(a), const std::runtime_error &e, std::string(e.what()), "Cannot merge ComponentInfo: " @@ -1040,25 +1046,28 @@ public: } void test_merge_fail_identical_interval_when_component_rotations_differ() { + auto pos0 = Eigen::Vector3d(1, 1, 1); + auto rot0 = + Eigen::Quaterniond(Eigen::AngleAxisd(0, Eigen::Vector3d::UnitY())); + auto infos1 = makeFlatTree(PosVec(1, pos0), RotVec(1, rot0)); // Now make a strange situation where the components have different // positions but detector rotations are the same auto pos = Eigen::Vector3d{1, 0, 0}; auto rot1 = Eigen::Quaterniond{ Eigen::AngleAxisd(5.0, Eigen::Vector3d{-1, 2, -3}.normalized())}; auto rot2 = Eigen::Quaterniond{ - Eigen::AngleAxisd(5.0, Eigen::Vector3d{-1, 2, -3}.normalized())}; - - auto infos1 = makeFlatTree(PosVec(1), RotVec(1)); + Eigen::AngleAxisd(5.0, Eigen::Vector3d{-1, 2, -4}.normalized())}; ComponentInfo &a = *std::get<0>(infos1); a.setScanInterval({0, 1}); - a.setPosition(a.root(), pos); a.setRotation(a.root(), rot1); + a.setPosition(a.root(), pos); + a.setPosition(0, pos); auto infos2 = cloneInfos(infos1); ComponentInfo &b = *std::get<0>(infos2); - b.setPosition(b.root(), pos); b.setRotation(b.root(), rot2); - DetectorInfo &c = *std::get<1>(infos2); - c.setRotation(0, rot1); + b.setPosition(b.root(), pos); + b.setPosition(0, pos); + b.setRotation(0, rot1); // same as a's detector rotation TS_ASSERT_THROWS_EQUALS(b.merge(a), const std::runtime_error &e, std::string(e.what()), "Cannot merge ComponentInfo: "