96 lines
3.0 KiB
C++
96 lines
3.0 KiB
C++
// Copyright (2019-2023) Paul Scherrer Institute
|
|
|
|
#include "catch2/catch.hpp"
|
|
#include "../common/PixelMask.h"
|
|
|
|
TEST_CASE("PixelMask_MaskModuleEdges","[PixelMask]") {
|
|
DiffractionExperiment experiment(DetectorGeometry(4, 1));
|
|
experiment.MaskModuleEdges(true).Mode(DetectorMode::Raw);
|
|
|
|
PixelMask mask(experiment);
|
|
|
|
auto mask_out = mask.GetMask(experiment);
|
|
|
|
REQUIRE(mask_out.size() == experiment.GetModulesNum() * RAW_MODULE_SIZE);
|
|
|
|
CHECK(mask_out[0] == (1u<<30));
|
|
CHECK(mask_out[1022] == (1u<<30));
|
|
CHECK(mask_out[1024*5] == (1u<<30));
|
|
CHECK(mask_out[1024*5+1023] == (1u<<30));
|
|
CHECK(mask_out[1024*512-1] == (1u<<30));
|
|
CHECK(mask_out[1024*512] == (1u<<30));
|
|
CHECK(mask_out[1024*512*3+123] == (1u<<30));
|
|
CHECK(mask_out[1024*512*3+1024] == (1u<<30));
|
|
CHECK(mask_out[1024*800+256] == 0);
|
|
}
|
|
|
|
TEST_CASE("PixelMask_MaskChipEdges","[PixelMask]") {
|
|
DiffractionExperiment experiment(DetectorGeometry(4, 1));
|
|
experiment.MaskChipEdges(true).Mode(DetectorMode::Raw);
|
|
|
|
PixelMask mask(experiment);
|
|
auto mask_out = mask.GetMask(experiment);
|
|
REQUIRE(mask_out.size() == experiment.GetModulesNum() * RAW_MODULE_SIZE);
|
|
|
|
CHECK(mask_out[255] == (1u<<31));
|
|
CHECK(mask_out[1024*800+256] == (1u<<31));
|
|
|
|
CHECK(mask_out[1024*233+511] == (1u<<31));
|
|
CHECK(mask_out[1024*512+512] == (1u<<31));
|
|
CHECK(mask_out[1024*1000+767] == (1u<<31));
|
|
CHECK(mask_out[1024*(512*3+12)+768] == (1u<<31));
|
|
CHECK(mask_out[1024*(512+255)+345] == (1u<<31));
|
|
CHECK(mask_out[1024*(1024+256)+876] == (1u<<31));
|
|
|
|
CHECK(mask_out[1022] == 0);
|
|
CHECK(mask_out[1024*5+1023] == 0);
|
|
CHECK(mask_out[1024*18] == 0);
|
|
}
|
|
|
|
TEST_CASE("PixelMask_CalculateNexusMask","[PixelMask]") {
|
|
DiffractionExperiment experiment(DetectorGeometry(4, 1, 8, 36, false));
|
|
experiment.MaskModuleEdges(false).MaskChipEdges(false);
|
|
|
|
PixelMask mask(experiment);
|
|
|
|
std::vector<uint32_t> v(4 * RAW_MODULE_SIZE, 0);
|
|
v[2] = 1;
|
|
v[4] = 1;
|
|
v[5] = 1;
|
|
|
|
REQUIRE_NOTHROW(mask.LoadDetectorBadPixelMask(v, 2));
|
|
|
|
auto mask_v = mask.GetMask(experiment);
|
|
|
|
REQUIRE(mask_v.size() == experiment.GetPixelsNum() );
|
|
REQUIRE(mask_v[0] == 0);
|
|
REQUIRE(mask_v[1] == 0);
|
|
REQUIRE(mask_v[2] == 4);
|
|
REQUIRE(mask_v[3] == 0);
|
|
REQUIRE(mask_v[4] == 4);
|
|
REQUIRE(mask_v[5] == 4);
|
|
REQUIRE(mask_v[6] == 0);
|
|
REQUIRE(mask_v[1030 * 700 + 300] == 0);
|
|
}
|
|
|
|
TEST_CASE("PixelMask_MaskDetectorGaps","[PixelMask]") {
|
|
DiffractionExperiment experiment(DetectorGeometry(8, 2, 8, 36, true));
|
|
|
|
experiment.PhotonEnergy_keV(WVL_1A_IN_KEV);
|
|
|
|
PixelMask mask(experiment);
|
|
auto mask_export = mask.GetMask(experiment);
|
|
REQUIRE(mask_export.size() == experiment.GetPixelsNum());
|
|
|
|
REQUIRE(mask_export[0] == 0);
|
|
REQUIRE(mask_export[1029] == 0);
|
|
REQUIRE(mask_export[1030] == 1);
|
|
REQUIRE(mask_export[1031] == 1);
|
|
REQUIRE(mask_export[1037] == 1);
|
|
REQUIRE(mask_export[1038] == 0);
|
|
|
|
REQUIRE(mask_export[(1030*2+8)*514] == 1);
|
|
REQUIRE(mask_export[(1030*2+8)*514 + 566] == 1);
|
|
REQUIRE(mask_export[(1030*2+8)*(514*3+36*2+12) + 566] == 1);
|
|
}
|