// Copyright (2019-2024) Paul Scherrer Institute #include #include "../writer/HDF5Objects.h" #include "../resonet/NeuralNetResPredictor.h" TEST_CASE("NeuralNetResPredictor_Prepare", "[LinearAlgebra][Coord]") { DiffractionExperiment experiment(DetectorGeometry(8, 2, 8, 36)); experiment.DetectorDistance_mm(75).PhotonEnergy_keV(12.4).BeamX_pxl(1000).BeamY_pxl(1000); experiment.NeuralNetModelPath("../../resonet/traced_resnet_model.pt"); std::vector v(experiment.GetPixelsNum(),0); v[1000 * experiment.GetXPixelsNum() + 1000] = 100; v[1000 * experiment.GetXPixelsNum() + 1001] = 20; v[1001 * experiment.GetXPixelsNum() + 1000] = 30; v[1001 * experiment.GetXPixelsNum() + 1001] = INT16_MIN; v[1050 * experiment.GetXPixelsNum() + 1050] = 52; v[2000 * experiment.GetXPixelsNum() + 1500] = 160; NeuralNetResPredictor predictor(experiment); REQUIRE(predictor.GetMaxPoolFactor() == 2); predictor.Prepare(v.data()); auto nn_input = predictor.GetModelInput(); REQUIRE(nn_input[0] == 10); REQUIRE(nn_input[25 * 512 + 25] == 7); REQUIRE(nn_input[500 * 512 + 250] == 12); } TEST_CASE("NeuralNetResPredictor_Inference", "[LinearAlgebra][Coord]") { DiffractionExperiment experiment(DetectorGeometry(8, 2, 8, 36)); experiment.DetectorDistance_mm(75).PhotonEnergy_keV(12.4).BeamY_pxl(1136).BeamX_pxl(1090); experiment.NeuralNetModelPath("../../resonet/traced_resnet_model.pt"); NeuralNetResPredictor predictor(experiment); HDF5ReadOnlyFile data("../../tests/test_data/compression_benchmark.h5"); HDF5DataSet dataset(data, "/entry/data/data"); HDF5DataSpace file_space(dataset); std::vector image_conv (file_space.GetDimensions()[1] * file_space.GetDimensions()[2]); std::vector start = {4,0,0}; std::vector file_size = {1, file_space.GetDimensions()[1], file_space.GetDimensions()[2]}; dataset.ReadVector(image_conv, start, file_size); auto res = predictor.Inference(image_conv.data()); std::cout << res << std::endl; REQUIRE(res < 1.5); REQUIRE(res > 1.4); }