161 lines
8.8 KiB
C++
161 lines
8.8 KiB
C++
// Copyright (2019-2022) Paul Scherrer Institute
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
#include <catch2/catch.hpp>
|
|
#include "../common/DetectorGeometry.h"
|
|
|
|
TEST_CASE("DetectorGeometry_Regular", "[DetectorGeometry]") {
|
|
DetectorGeometry geometry(18, 3, 8, 36, false);
|
|
|
|
const JFJochProtoBuf::DetectorGeometry pbuf = geometry;
|
|
REQUIRE(pbuf.module_geometry_size() == 18);
|
|
|
|
REQUIRE(pbuf.width_pxl() == 3 * 1030 + 2 * 8);
|
|
REQUIRE(pbuf.height_pxl() == 6 * 514 + 5 * 36);
|
|
REQUIRE(pbuf.module_geometry(0).pixel0() == 0);
|
|
REQUIRE(pbuf.module_geometry(2).pixel0() == 2 * 1030 + 2 * 8);
|
|
|
|
REQUIRE(pbuf.module_geometry(15).pixel0() == pbuf.width_pxl() * (514 * 5 + 36 * 5));
|
|
REQUIRE(pbuf.module_geometry(15).fast_direction_step() == 1);
|
|
REQUIRE(pbuf.module_geometry(15).slow_direction_step() == pbuf.width_pxl());
|
|
}
|
|
|
|
TEST_CASE("DetectorGeometry_RegularMirror", "[DetectorGeometry]") {
|
|
DetectorGeometry geometry(18, 3, 8, 36, true);
|
|
|
|
const JFJochProtoBuf::DetectorGeometry pbuf = geometry;
|
|
REQUIRE(pbuf.module_geometry_size() == 18);
|
|
|
|
REQUIRE(pbuf.width_pxl() == 3 * 1030 + 2 * 8);
|
|
REQUIRE(pbuf.height_pxl() == 6 * 514 + 5 * 36);
|
|
REQUIRE(pbuf.module_geometry(0).pixel0() == pbuf.width_pxl() * (pbuf.height_pxl() - 1));
|
|
REQUIRE(pbuf.module_geometry(2).pixel0() == pbuf.width_pxl() * (pbuf.height_pxl() - 1) + 2 * 1030 + 2 * 8);
|
|
|
|
CHECK(pbuf.module_geometry(15).pixel0() == pbuf.width_pxl() * 513);
|
|
CHECK(pbuf.module_geometry(17).pixel0() == pbuf.width_pxl() * (513) + 2 * 1030 + 2 * 8);
|
|
REQUIRE(pbuf.module_geometry(15).fast_direction_step() == 1);
|
|
REQUIRE(pbuf.module_geometry(15).slow_direction_step() == -pbuf.width_pxl());
|
|
}
|
|
|
|
TEST_CASE("DetectorModuleGeometry_SameAxis", "[DetectorGeometry]") {
|
|
std::unique_ptr<DetectorModuleGeometry> geometry;
|
|
|
|
REQUIRE_THROWS(geometry = std::make_unique<DetectorModuleGeometry>(0,0,
|
|
DetectorModuleGeometry::Direction::Xpos,
|
|
DetectorModuleGeometry::Direction::Xpos));
|
|
|
|
REQUIRE_THROWS(geometry = std::make_unique<DetectorModuleGeometry>(0,0,
|
|
DetectorModuleGeometry::Direction::Ypos,
|
|
DetectorModuleGeometry::Direction::Ypos));
|
|
REQUIRE_THROWS(geometry = std::make_unique<DetectorModuleGeometry>(2000,2000,
|
|
DetectorModuleGeometry::Direction::Yneg,
|
|
DetectorModuleGeometry::Direction::Ypos));
|
|
|
|
REQUIRE_THROWS(geometry = std::make_unique<DetectorModuleGeometry>(2000,2000,
|
|
DetectorModuleGeometry::Direction::Xpos,
|
|
DetectorModuleGeometry::Direction::Xneg));
|
|
|
|
REQUIRE_NOTHROW(geometry = std::make_unique<DetectorModuleGeometry>(2000,2000,
|
|
DetectorModuleGeometry::Direction::Xneg,
|
|
DetectorModuleGeometry::Direction::Ypos));
|
|
|
|
REQUIRE_NOTHROW(geometry = std::make_unique<DetectorModuleGeometry>(0,0,
|
|
DetectorModuleGeometry::Direction::Ypos,
|
|
DetectorModuleGeometry::Direction::Xpos));
|
|
}
|
|
|
|
|
|
TEST_CASE("DetectorModuleGeometry_NoSpace", "[DetectorGeometry]") {
|
|
std::unique_ptr<DetectorModuleGeometry> geometry;
|
|
|
|
REQUIRE_THROWS(geometry = std::make_unique<DetectorModuleGeometry>(1022,0,
|
|
DetectorModuleGeometry::Direction::Xneg,
|
|
DetectorModuleGeometry::Direction::Ypos));
|
|
|
|
REQUIRE_THROWS(geometry = std::make_unique<DetectorModuleGeometry>(1022,512,
|
|
DetectorModuleGeometry::Direction::Xpos,
|
|
DetectorModuleGeometry::Direction::Yneg));
|
|
|
|
REQUIRE_THROWS(geometry = std::make_unique<DetectorModuleGeometry>(1029,513,
|
|
DetectorModuleGeometry::Direction::Yneg,
|
|
DetectorModuleGeometry::Direction::Xneg));
|
|
|
|
REQUIRE_NOTHROW(geometry = std::make_unique<DetectorModuleGeometry>(1029,513,
|
|
DetectorModuleGeometry::Direction::Xneg,
|
|
DetectorModuleGeometry::Direction::Yneg));
|
|
|
|
REQUIRE_NOTHROW(geometry = std::make_unique<DetectorModuleGeometry>(513,1029,
|
|
DetectorModuleGeometry::Direction::Yneg,
|
|
DetectorModuleGeometry::Direction::Xneg));
|
|
}
|
|
|
|
TEST_CASE("DetectorModuleGeometry_GetMaxX_GetMaxY", "[DetectorGeometry]") {
|
|
std::unique_ptr<DetectorModuleGeometry> geometry;
|
|
|
|
REQUIRE_NOTHROW(geometry = std::make_unique<DetectorModuleGeometry>(0,0,
|
|
DetectorModuleGeometry::Direction::Xpos,
|
|
DetectorModuleGeometry::Direction::Ypos));
|
|
|
|
REQUIRE(geometry->GetMaxX() == 1029);
|
|
REQUIRE(geometry->GetMaxY() == 513);
|
|
|
|
REQUIRE_NOTHROW(geometry = std::make_unique<DetectorModuleGeometry>(2029,1513,
|
|
DetectorModuleGeometry::Direction::Xneg,
|
|
DetectorModuleGeometry::Direction::Yneg));
|
|
|
|
REQUIRE(geometry->GetMaxX() == 2029);
|
|
REQUIRE(geometry->GetMaxY() == 1513);
|
|
|
|
REQUIRE_NOTHROW(geometry = std::make_unique<DetectorModuleGeometry>(2029,1513,
|
|
DetectorModuleGeometry::Direction::Yneg,
|
|
DetectorModuleGeometry::Direction::Xneg));
|
|
|
|
REQUIRE(geometry->GetMaxX() == 2029);
|
|
REQUIRE(geometry->GetMaxY() == 1513);
|
|
|
|
REQUIRE_NOTHROW(geometry = std::make_unique<DetectorModuleGeometry>(2029,1513,
|
|
DetectorModuleGeometry::Direction::Yneg,
|
|
DetectorModuleGeometry::Direction::Xpos));
|
|
|
|
REQUIRE(geometry->GetMaxX() == 2029 + 513);
|
|
REQUIRE(geometry->GetMaxY() == 1513);
|
|
|
|
REQUIRE_NOTHROW(geometry = std::make_unique<DetectorModuleGeometry>(2029,1513,
|
|
DetectorModuleGeometry::Direction::Ypos,
|
|
DetectorModuleGeometry::Direction::Xneg));
|
|
|
|
REQUIRE(geometry->GetMaxX() == 2029);
|
|
REQUIRE(geometry->GetMaxY() == 1513 + 1029);
|
|
}
|
|
|
|
TEST_CASE("DetectorGeometry_Custom", "[DetectorGeometry]") {
|
|
std::vector<DetectorModuleGeometry> module_geom;
|
|
|
|
REQUIRE_NOTHROW(module_geom.emplace_back(2999, 2999, DetectorModuleGeometry::Direction::Xneg,
|
|
DetectorModuleGeometry::Direction::Yneg));
|
|
|
|
REQUIRE_NOTHROW(module_geom.emplace_back(0, 0, DetectorModuleGeometry::Direction::Ypos,
|
|
DetectorModuleGeometry::Direction::Xpos));
|
|
|
|
REQUIRE_NOTHROW(module_geom.emplace_back(5000, 0, DetectorModuleGeometry::Direction::Ypos,
|
|
DetectorModuleGeometry::Direction::Xpos));
|
|
|
|
DetectorGeometry geometry(module_geom);
|
|
|
|
REQUIRE(geometry.GetModulesNum() == 3);
|
|
JFJochProtoBuf::DetectorGeometry pbuf_geom = geometry;
|
|
|
|
CHECK(pbuf_geom.height_pxl() == 2999+1);
|
|
CHECK(pbuf_geom.width_pxl() == 5513+1);
|
|
CHECK(pbuf_geom.module_geometry(0).pixel0() == 2999 * pbuf_geom.width_pxl() + 2999);
|
|
CHECK(pbuf_geom.module_geometry(1).pixel0() == 0);
|
|
CHECK(pbuf_geom.module_geometry(2).pixel0() == 5000);
|
|
|
|
CHECK(pbuf_geom.module_geometry(0).fast_direction_step() == -1);
|
|
CHECK(pbuf_geom.module_geometry(1).fast_direction_step() == pbuf_geom.width_pxl());
|
|
CHECK(pbuf_geom.module_geometry(2).fast_direction_step() == pbuf_geom.width_pxl());
|
|
|
|
CHECK(pbuf_geom.module_geometry(0).slow_direction_step() == -pbuf_geom.width_pxl());
|
|
CHECK(pbuf_geom.module_geometry(1).slow_direction_step() == 1);
|
|
CHECK(pbuf_geom.module_geometry(2).slow_direction_step() == 1);
|
|
} |