From 7761c6cdedab489325e2ae32e5f151dc6f7f7a56 Mon Sep 17 00:00:00 2001 From: gerald <gerald.moesenlechner@univie.ac.at> Date: Wed, 31 Jan 2024 18:31:11 +0100 Subject: [PATCH] Release of V1.1 --- test/DetectorFeatureTest.cpp | 50 +++++++++++++++-- test/FCUTest.cpp | 101 +++++++++++++++++++++++++++++------ test/FCUTest.hpp | 7 ++- test/HFSTest.cpp | 76 +++++++++++++++++++------- test/HFS_config_test.xml | 6 ++- test/UtilityTest.cpp | 14 ++--- test/example.cpp | 63 +++++++++++----------- 7 files changed, 236 insertions(+), 81 deletions(-) diff --git a/test/DetectorFeatureTest.cpp b/test/DetectorFeatureTest.cpp index c152e9a..b6ae68c 100644 --- a/test/DetectorFeatureTest.cpp +++ b/test/DetectorFeatureTest.cpp @@ -79,6 +79,16 @@ void DetectorFeaturesTest::testDark() std::cout << "Check if single hot pixel is a statistical outlier.\n"; CPPUNIT_ASSERT(dark[100] > (mean + std)); + + std::cout << "Check dark mean = 0\n"; + + generate_dark(dark, 0, 1, hp, 200, 200); + + mean = 0; + for(i = 0; i < 200*200; i++) + { + CPPUNIT_ASSERT_DOUBLES_EQUAL(dark[i], 0.0, 1e-7); + } } void DetectorFeaturesTest::testHotPixels() @@ -113,13 +123,17 @@ void DetectorFeaturesTest::testFlat() } generate_flat(flat, 0.9, 0.08, 200, 200); - std::cout << "Check if flat values are not 0 and below 1.\n"; + std::cout << "Check if flat values are below 1.\n"; for(i = 0; i < 200*200; i++){ - CPPUNIT_ASSERT(flat[i] > 0.0); CPPUNIT_ASSERT(flat[i] <= 1.0); } + generate_flat(flat, 0.05, 0.08, 200, 200); + std::cout << "Check if flat values are not smaller than 0.\n"; + for(i = 0; i < 200*200; i++){ + CPPUNIT_ASSERT(flat[i] >= 0.0); + } } void DetectorFeaturesTest::testStar() @@ -284,6 +298,7 @@ void DetectorFeaturesTest::testBkgr() void DetectorFeaturesTest::testSmear() { unsigned int i; + int warning; for(i = 0; i < 125*125; i++){ kernel[i] = 0.; @@ -307,8 +322,37 @@ void DetectorFeaturesTest::testSmear() kernel[i] = 0.; } - generate_linear_smearing_kernel(kernel, -70, -70, 130, 130, 125); + warning = generate_linear_smearing_kernel(kernel, -70, -70, 130, 130, 125); std::cout << "Check limit failsave.\n"; CPPUNIT_ASSERT(kernel[0] > 0.0); CPPUNIT_ASSERT(kernel[122 + 122*125] > 0.0); + CPPUNIT_ASSERT(warning == 1); + + for(i = 0; i < 125*125; i++){ + kernel[i] = 0.; + } + + warning = generate_linear_smearing_kernel(kernel, 0, 0, 0, 0, 125); + std::cout << "Check 0 lenght smear.\n"; + CPPUNIT_ASSERT(warning == 0); + CPPUNIT_ASSERT(kernel[62 + 62*125] > 0.0); + + for(i = 0; i < 125*125; i++){ + kernel[i] = 0.; + } + + generate_linear_smearing_kernel(kernel, 0, 0, 10, 0, 125); + std::cout << "Check linear x smear.\n"; + CPPUNIT_ASSERT(kernel[62 + 125*62] > 0.0); + CPPUNIT_ASSERT(kernel[70 + 125*62] > 0.0); + + for(i = 0; i < 125*125; i++){ + kernel[i] = 0.; + } + + generate_linear_smearing_kernel(kernel, 0, 0, 0, 10, 125); + std::cout << "Check linear y smear.\n"; + CPPUNIT_ASSERT(kernel[62 + 125*62] > 0.0); + CPPUNIT_ASSERT(kernel[62 + 125*70] > 0.0); + } diff --git a/test/FCUTest.cpp b/test/FCUTest.cpp index 60a22fe..0aadf3b 100644 --- a/test/FCUTest.cpp +++ b/test/FCUTest.cpp @@ -16,6 +16,8 @@ void FCUTest::setUp() const char noStarName[128] = "./test/noStar.txt"; const char acqImgName[128] = "./test/acquisitionTest.txt"; const char starImgName[128] = "./test/trackingTest.txt"; + sum_star = 0; + sum_acq = 0; std::ifstream noStarIf, starImgIf, acqImgIf; acqImgIf.open(acqImgName, std::ifstream::in); @@ -24,6 +26,7 @@ void FCUTest::setUp() for (i = 0; i < 200*200; i++) { acqImgIf >> acqImg[i]; + sum_acq = sum_acq + acqImg[i]; } acqImgIf.close(); } @@ -50,6 +53,7 @@ void FCUTest::setUp() for (i = 0; i < 64*64; i++) { starImgIf >> starImg[i]; + sum_star = sum_star + starImg[i]; } starImgIf.close(); } @@ -60,15 +64,25 @@ void FCUTest::tearDown() { } -void FCUTest::testMin() +void FCUTest::testMinMean() { unsigned int testSet[10] = {3, 6, 0, 4, 9, 7, 5, 2, 8, 1}; + int testSetMean[3] = {3, 6, 0}; unsigned int res; + int resMean; + float mean, sig; res = GetMin(testSet, 10); CPPUNIT_ASSERT(res == 0); + resMean = MeanSigma(testSetMean, 0, &mean, &sig); + CPPUNIT_ASSERT(resMean == -1); + + resMean = 0; + resMean = MeanSigma(testSetMean, 1, &mean, &sig); + CPPUNIT_ASSERT(resMean == -1); + } void FCUTest::testMedianFilter() @@ -106,58 +120,71 @@ void FCUTest::testValidation() std::cout << "Check Dimension check.\n"; - package = CheckRoiForStar(noSignal, 0, 64, 100, 100, 0.6, 1, 32., 32.); + package = CheckRoiForStar(noSignal, 0, 64, 100, 100, 0.6, 1, 32., 32., 20, sum_star); std::cout << package.index << "\n"; CPPUNIT_ASSERT(package.index == 111); package.index = 0; - package = CheckRoiForStar(noSignal, 64, 0, 100, 100, 0.6, 1, 32., 32.); + package = CheckRoiForStar(noSignal, 64, 0, 100, 100, 0.6, 1, 32., 32., 20, sum_star); + CPPUNIT_ASSERT(package.index == 111); + std::cout << package.index << "\n"; + + package.index = 0; + + package = CheckRoiForStar(noSignal, 15, 15, 100, 100, 0.6, 1, 32., 32., 20, sum_star); CPPUNIT_ASSERT(package.index == 111); std::cout << package.index << "\n"; package.index = 0; std::cout << "Check constant image check.\n"; - package = CheckRoiForStar(noSignal, 64, 64, 100, 100, 0.6, 1, 32., 32.); + package = CheckRoiForStar(noSignal, 64, 64, 100, 100, 0.6, 1, 32., 32., 20, sum_star); std::cout << package.index << "\n"; CPPUNIT_ASSERT(package.index == 101); package.index = 0; std::cout << "Check no star check.\n"; - package = CheckRoiForStar(noStar, 64, 64, 100, 20, 0.6, 1, 32., 32.); + package = CheckRoiForStar(noStar, 64, 64, 100, 20, 0.6, 1, 32., 32., 20, sum_star); std::cout << package.index << "\n"; CPPUNIT_ASSERT(package.index == 102); package.index = 0; std::cout << "Check too low signal check.\n"; - package = CheckRoiForStar(starImg, 64, 64, 10000, 20, 0.6, 1, 32., 32.); + package = CheckRoiForStar(starImg, 64, 64, 10000, 20, 0.6, 1, 32., 32., 20, sum_star); std::cout << package.index << "\n"; CPPUNIT_ASSERT(package.index == 104); package.index = 0; std::cout << "Check too low sigma check.\n"; - package = CheckRoiForStar(starImg, 64, 64, 100, 200, 0.6, 1, 32., 32.); + package = CheckRoiForStar(starImg, 64, 64, 100, 200, 0.6, 1, 32., 32., 20, sum_star); std::cout << package.index << "\n"; CPPUNIT_ASSERT(package.index == 105); package.index = 0; std::cout << "Check too low pearson check.\n"; - package = CheckRoiForStar(starImg, 64, 64, 100, 20, 1.0, 1, 32., 32.); + std_threshold(starImg, 64, 64); + package = CheckRoiForStar(starImg, 64, 64, 100, 20, 1.0, 1, 32., 32., 50, 18000); std::cout << package.index << "\n"; CPPUNIT_ASSERT(package.index == 106); package.index = 0; std::cout << "Check valid output.\n"; - package = CheckRoiForStar(starImg, 64, 64, 100, 20, 0.0, 1, 32., 32.); + package = CheckRoiForStar(starImg, 64, 64, 100, 20, 0.0, 1, 32., 32., 50, 18000); + std::cout << package.index << "\n"; + CPPUNIT_ASSERT(package.index < 1.0); + + package.index = 0; + std::cout << "Check valid output.\n"; + + package = CheckRoiForStar(starImg, 64, 64, 100, 20, 0.0, 2, 32., 32., 50, 18000); std::cout << package.index << "\n"; CPPUNIT_ASSERT(package.index < 1.0); - } void FCUTest::testAcquisition() @@ -165,9 +192,8 @@ void FCUTest::testAcquisition() struct coord output; std::cout << "Check valid output.\n"; - - output = SourceDetection(acqImg, 200, 200, 0, 1, 4, 30000, 50, 20, 3, 5., 5., 100, 20, 0.3); - + std_threshold(acqImg, 200, 200); + output = SourceDetection(acqImg, 200, 200, 1, 4, 22000, 50, 20, 3, 5., 5., 100, 50, 0.3); CPPUNIT_ASSERT(output.x < 100.0); CPPUNIT_ASSERT(output.x > 99.0); CPPUNIT_ASSERT(output.y < 100.0); @@ -177,8 +203,15 @@ void FCUTest::testAcquisition() std::cout << "Check no valid target.\n"; - output = SourceDetection(acqImg, 200, 200, 0, 1, 4, 200000, 50, 20, 3, 5., 5., 100, 20, 0.3); + output = SourceDetection(acqImg, 200, 200, 1, 4, 200000, 50, 20, 3, 5., 5., 100, 50, 0.3); + CPPUNIT_ASSERT(output.validity.flag == 0); + + std::cout << "Check dimension check.\n"; + + output = SourceDetection(acqImg, 2, 2, 1, 4, sum_acq, 50, 20, 3, 5., 5., 100, 50, 0.3); CPPUNIT_ASSERT(output.validity.flag == 0); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output.x, 0.0, 1e-7); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output.y, 0.0, 1e-7); } void FCUTest::testCentroid() @@ -186,8 +219,8 @@ void FCUTest::testCentroid() struct coord output; std::cout << "Check valid output.\n"; - - output = ArielCoG(starImg, 64, 64, 5, 0, 5., 5., 1, 100, 20, 0.3); + std_threshold(starImg, 64, 64); + output = ArielCoG(starImg, 64, 64, 5, 5., 5., 1, 100, 20, 0.3, 50, 18000); CPPUNIT_ASSERT(output.x < 32.0); CPPUNIT_ASSERT(output.x > 31.0); CPPUNIT_ASSERT(output.y < 32.0); @@ -197,8 +230,42 @@ void FCUTest::testCentroid() std::cout << "Check invalid output.\n"; - output = ArielCoG(noStar, 64, 64, 5, 0, 5., 5., 1, 100, 200, 0.3); + output = ArielCoG(noStar, 64, 64, 5, 5., 5., 1, 100, 200, 0.3, 50, sum_star); CPPUNIT_ASSERT(output.validity.flag == 0); } +void FCUTest::testThreshold() +{ + unsigned int i; + unsigned int sum, mean, std, sumSquare, min, max, maxOg; + + sum = 0; + sumSquare = 0; + maxOg = 0; + for(i = 0; i < 64*64; i++){ + sum = sum + starImg[i]; + sumSquare = sumSquare + (starImg[i] * starImg[i]); + if(starImg[i] > maxOg) + maxOg = starImg[i]; + } + mean = (unsigned int) (sum / (64 * 64)); + std = (unsigned int) sqrt((sumSquare / (64 * 64)) - (mean*mean)); + + std_threshold(starImg, 64, 64); + + min = starImg[0]; + max = starImg[0]; + + for(i = 0; i < 64*64; i++){ + if(starImg[i] < min) + min = starImg[i]; + if(starImg[i] > max) + max = starImg[i]; + } + + CPPUNIT_ASSERT(min == 0); + CPPUNIT_ASSERT(max == (maxOg - mean - std)); + +} + diff --git a/test/FCUTest.hpp b/test/FCUTest.hpp index 18e4dfc..23183b9 100644 --- a/test/FCUTest.hpp +++ b/test/FCUTest.hpp @@ -6,16 +6,18 @@ class FCUTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(FCUTest); - CPPUNIT_TEST(testMin); + CPPUNIT_TEST(testMinMean); CPPUNIT_TEST(testMedianFilter); CPPUNIT_TEST(testValidation); CPPUNIT_TEST(testAcquisition); CPPUNIT_TEST(testCentroid); + CPPUNIT_TEST(testThreshold); CPPUNIT_TEST_SUITE_END(); unsigned int noSignal[64*64]; unsigned int noStar[64*64]; unsigned int starImg[64*64]; unsigned int acqImg[200*200]; + unsigned int sum_star, sum_acq; public: @@ -24,11 +26,12 @@ public: void setUp(); void tearDown(); - void testMin(); + void testMinMean(); void testMedianFilter(); void testValidation(); void testAcquisition(); void testCentroid(); + void testThreshold(); }; #endif //FCUTEST_H diff --git a/test/HFSTest.cpp b/test/HFSTest.cpp index 72f61e4..e8e8786 100644 --- a/test/HFSTest.cpp +++ b/test/HFSTest.cpp @@ -108,6 +108,8 @@ void HFSTest::testConstructor() CPPUNIT_ASSERT_EQUAL((int)state.med_track, 1); + CPPUNIT_ASSERT_EQUAL((int)state.tolerance_track, 20); + CPPUNIT_ASSERT_EQUAL((int)state.threshold_track, 1); CPPUNIT_ASSERT_DOUBLES_EQUAL(state.delay_track, 0.02, 0.001); @@ -194,33 +196,77 @@ void HFSTest::testTransformation() char path[] = "./test/HFS_config_test.xml"; char* real_path = realpath(path, NULL); FGS fgs(real_path); - double vecx[3] = {1e-5 ,0 , 0}; - double vecy[3] = {0 ,1e-5 , 0}; - double vecz[3] = {0 ,0 , 1e-5}; + double vecx[3] = {1e-5, 0, 1}; + double vecy[3] = {0, 1e-5, 1}; + double vecz[3] = {0, 0, 1}; double vecVel[3] = {0, 0, 0}; double output[2]; double velRes; fgs.transform_to_detector(vecx, vecVel, 0, 0, output); - CPPUNIT_ASSERT_DOUBLES_EQUAL(output[0], 0, 1e-7); - CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], 1.7*1e-8*(360/TWO_PI)*3600000/176.0, 0.1); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[0], 1e-5*(360/TWO_PI)*3600000/175.00, 1e-5); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], 0, 1e-7); fgs.transform_to_detector(vecy, vecVel, 0, 0, output); - CPPUNIT_ASSERT_DOUBLES_EQUAL(output[0], 1e-5*(360/TWO_PI)*3600000/176.0, 0.1); - CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], 0, 1e-7); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[0], 0, 1e-7); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], 1e-5*(360/TWO_PI)*3600000/175.0, 1e-5); fgs.transform_to_detector(vecz, vecVel, 0, 0, output); - CPPUNIT_ASSERT_DOUBLES_EQUAL(output[0], 0, 1e-7); - CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], 0.999998*1e-5*(360/TWO_PI)*3600000/176.0, 0.1); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[0], 0, 1e-5); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], 0, 1e-5); + + vecVel[0] = 5; - vecVel[0] = 1000; + fgs.transform_to_detector(vecx, vecVel, 0, 0, output); + + velRes = (1e-5 + 5/CVEL)*(360/TWO_PI)*3600000/175.0; + + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[0], velRes, 1e-5); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], 0, 1e-5); + + vecVel[0] = 0; + vecVel[1] = 5; + fgs.transform_to_detector(vecy, vecVel, 0, 0, output); + velRes = (1e-5 + 5/CVEL)*(360/TWO_PI)*3600000/175.0; + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[0], 0, 1e-5); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], velRes, 1e-5); + + vecVel[1] = 0; + vecVel[0] = 0; + fgs.set_mode("Acquisition"); + + vecx[0] = 1e-5; + vecx[1] = 0; + vecx[2] = 1; fgs.transform_to_detector(vecx, vecVel, 0, 0, output); - velRes = 1.7*1e-8 - 1.7/CVEL; + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[0], 1e-5*(360/TWO_PI)*3600000/175.00, 1e-5); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], 0, 1e-7); + vecy[0] = 0; + vecy[1] = 1e-5; + vecy[2] = 1; + fgs.transform_to_detector(vecy, vecVel, 0, 0, output); CPPUNIT_ASSERT_DOUBLES_EQUAL(output[0], 0, 1e-7); - CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], velRes*(360/TWO_PI)*3600000/176.0, 0.1); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], 1e-5*(360/TWO_PI)*3600000/175.0, 1e-5); + + fgs.transform_to_detector(vecz, vecVel, 0, 0, output); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[0], 0, 1e-5); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], 0, 1e-5); + + vecVel[0] = 5; + + fgs.transform_to_detector(vecx, vecVel, 0, 0, output); + velRes = (1e-5 + 5/CVEL)*(360/TWO_PI)*3600000/175.0; + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[0], velRes, 1e-5); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], 0, 1e-5); + vecVel[0] = 0; + vecVel[1] = 5; + fgs.transform_to_detector(vecy, vecVel, 0, 0, output); + velRes = (1e-5 + 5/CVEL)*(360/TWO_PI)*3600000/175.0; + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[0], 0, 1e-5); + CPPUNIT_ASSERT_DOUBLES_EQUAL(output[1], velRes, 1e-5); } void HFSTest::testMainLoop() @@ -290,13 +336,11 @@ void HFSTest::testMainLoop() std::cout << "Check time propagation\n"; CPPUNIT_ASSERT_DOUBLES_EQUAL(state.sim_time, dt, 0.00001); CPPUNIT_ASSERT_DOUBLES_EQUAL(state.start_exposure, 0.0, 0.00001); - for(i = 0; i < 10; i++) { update.time = update.time + dt; fgs.set_params(update, &outPacket); } - state = fgs.get_hfs_state(); std::cout << "Check new integration start\n"; @@ -326,7 +370,6 @@ void HFSTest::testMainLoop() update.time = update.time + dt; fgs.set_params(update, &outPacket); } - state = fgs.get_hfs_state(); CPPUNIT_ASSERT_EQUAL((int )state.channel, 2); @@ -345,7 +388,6 @@ void HFSTest::testMainLoop() update.time = update.time + dt; fgs.set_params(update, &outPacket); } - state = fgs.get_hfs_state(); CPPUNIT_ASSERT_DOUBLES_EQUAL(state.reset_end, 0.0, 0.0001); @@ -416,13 +458,11 @@ void HFSTest::testSave() fgs.set_params(update, &outPacket); update.channel = 2; - for(i = 0; i < 50; i++) { update.time = update.time + dt; fgs.set_params(update, &outPacket); } - update.save = 1; fgs.set_params(update, &outPacket); update.save = 0; diff --git a/test/HFS_config_test.xml b/test/HFS_config_test.xml index 54e7b02..c388fb0 100644 --- a/test/HFS_config_test.xml +++ b/test/HFS_config_test.xml @@ -147,6 +147,8 @@ <delay>0.02</delay> <!-- Exposure time for mode Tracking in s, default: 0.1 --> <exposure_time>0.1</exposure_time> + <!-- Brightness tolerance for Validation default is 20% --> + <tolerance>20</tolerance> <!-- Dimension of the Tracking window in px, default: 64 --> <dim>64</dim> </Tracking> @@ -176,8 +178,8 @@ <extension_sigma>1000</extension_sigma> </Acquisition> - <!-- Relative path to the star catalouge --> - <Star_catalouge>./src/Star_catalouge.csv</Star_catalouge> + <!-- Relative path to the star catalogue --> + <Star_catalogue>./src/Star_catalogue.csv</Star_catalogue> <!-- Flag indicating if images features shall be generated from existing files. Only applicable for saved states--> diff --git a/test/UtilityTest.cpp b/test/UtilityTest.cpp index 7521ce7..3ada056 100644 --- a/test/UtilityTest.cpp +++ b/test/UtilityTest.cpp @@ -92,14 +92,14 @@ void UtilityTest::testUpsampling() sum = 0.0; sumUp = 0.0; - for(i = 0; i > 1000*1000; i++){ + for(i = 0; i < 1000*1000; i++){ if(i < 200*200){ sum = sum + array[i]; } sumUp = sumUp + upArray[i]; } - std::cout << "Check sum off upsampled array without copy.\n"; + std::cout << "Check sum of upsampled array without copy.\n"; CPPUNIT_ASSERT_DOUBLES_EQUAL(sum, sumUp, 0.0001); for(i = 0; i < 1000*1000; i++){ @@ -109,14 +109,14 @@ void UtilityTest::testUpsampling() upsample_image(array, upArray, 200, 200, 1000, 1000, 5, 1); sum = 0.0; sumUp = 0.0; - for(i = 0; i > 1000*1000; i++){ + for(i = 0; i < 1000*1000; i++){ if(i < 200*200){ sum = sum + array[i]; } sumUp = sumUp + upArray[i]; } - std::cout << "Check sum off upsampled array with copy.\n"; + std::cout << "Check sum of upsampled array with copy.\n"; CPPUNIT_ASSERT_DOUBLES_EQUAL(sum * 25, sumUp, 0.0001); } @@ -146,15 +146,15 @@ void UtilityTest::testDownsampling() CPPUNIT_ASSERT_DOUBLES_EQUAL(dsArray[1], 0.0, 0.0001); sum = 0.0; sumDown = 0.0; - for(i = 0; i > 1000*1000; i++){ + for(i = 0; i < 1000*1000; i++){ if(i < 200*200){ sumDown = sumDown + dsArray[i]; } sum = sum + array[i]; } - std::cout << "Check sum off upsampled array without copy.\n"; - CPPUNIT_ASSERT_DOUBLES_EQUAL(sum, sumDown, 0.0001); + std::cout << "Check sum of downsampled array.\n"; + CPPUNIT_ASSERT_DOUBLES_EQUAL(1, sumDown, 0.0001); for(i = 0; i < 1000*1000; i++){ array[i] = 0.0; } diff --git a/test/example.cpp b/test/example.cpp index 727655d..75f300f 100644 --- a/test/example.cpp +++ b/test/example.cpp @@ -11,14 +11,14 @@ int main() using std::chrono::milliseconds; char path[] = "./src/HFS_config.xml"; char* real_path = realpath(path, NULL); - hfs_parameters update; - centroid_packet output; + hfs_parameters update = hfs_parameters(); + outputHfs outPacket = outputHfs(); unsigned int i, ctr_tra, ctr_acq; double time; double sum_x_tra, sum_y_tra, sum_x_acq, sum_y_acq; /*Values for mean*/ /*Quaternion to put WASP-11 in the center of the DRF*/ /*The resuling measurement of the */ - double quat[4] = {0.8892834993148474, -0.0006038143244162956, 0.2873837014059442, -0.3557880006700909}; + double quat[4] = {0.8689485897529942 , 0.36411458356110155 , -0.3351849018145181, 0.0}; double vel[3] = {0.0, 0.0, 0.0}; /*Initialise FGS simulator by calling constructor*/ @@ -30,7 +30,7 @@ int main() sum_y_tra = 0.; ctr_acq = 0; ctr_tra = 0; - output.time = 0.; + outPacket.time = 0.; time = 0.; /*Parameters of the hfs_parameters input packet*/ @@ -94,15 +94,15 @@ int main() /*time step equivilant to 64Hz sampling*/ /*call update method of FGS class, centroid packet output is updated once the measurement packet was sent*/ - fgs.set_params(update, &output); + fgs.set_params(update, &outPacket); /*Print measurement if it changed*/ update.time = update.time + 0.015625; - if(time != output.time) + if(time != outPacket.time) { - time = output.time; - std::cout << "Packet time: " << output.time << "\tx: " << output.x << "\ty: " << output.y << "\tMode: " << output.mode << "\tvalidity: " << output.validity_flag << "\tIndex: " << output.validity_index << "\n"; - sum_x_tra += output.x; - sum_y_tra += output.y; + time = outPacket.time; + std::cout << "Packet time: " << outPacket.time << "\tx: " << outPacket.x << "\ty: " << outPacket.y << "\tMode: " << outPacket.mode << "\tvalidity: " << outPacket.validity_flag << "\tIndex: " << outPacket.validity_index << "\n"; + sum_x_tra += outPacket.x; + sum_y_tra += outPacket.y; ctr_tra++; } } @@ -113,22 +113,21 @@ int main() std::cout << "###################################\n"; update.mode = 1; - update.validation_signal = 80000; /*Unit quaternion of the current SC attitude in reference to J2000*/ update.position_quat[0] = quat[0]; for(i = 0; i < 10000; i++) { - fgs.set_params(update, &output); + fgs.set_params(update, &outPacket); update.time = update.time + 0.015625; - if(time != output.time) + if(time != outPacket.time) { - time = output.time; - std::cout << "Packet time: " << output.time << "\tx: " << output.x << "\ty: " << output.y << "\tMode: " << output.mode << "\tvalidity: " << output.validity_flag << "\tIndex: " << output.validity_index << "\n"; - sum_x_acq += output.x; - sum_y_acq += output.y; + time = outPacket.time; + std::cout << "Packet time: " << outPacket.time << "\tx: " << outPacket.x << "\ty: " << outPacket.y << "\tMode: " << outPacket.mode << "\tvalidity: " << outPacket.validity_flag << "\tIndex: " << outPacket.validity_index << "\n"; + sum_x_acq += outPacket.x; + sum_y_acq += outPacket.y; ctr_acq++; } } @@ -136,21 +135,20 @@ int main() std::cout << "###################################\n"; std::cout << "Mode Change Acquisition -> Tracking\n"; std::cout << "Centroids set to invalid\n"; - std::cout << "##################################\n"; + std::cout << "###################################\n"; update.mode = 2; update.set_invalid = 1; - update.validation_signal = 80000; for(i = 0; i < 1000; i++) { - fgs.set_params(update, &output); + fgs.set_params(update, &outPacket); update.time = update.time + 0.015625; - if(time != output.time) + if(time != outPacket.time) { - time = output.time; - std::cout << "Packet time: " << output.time << "\tx: " << output.x << "\ty: " << output.y << "\tMode: " << output.mode << "\tvalidity: " << output.validity_flag << "\tIndex: " << output.validity_index << "\n"; + time = outPacket.time; + std::cout << "Packet time: " << outPacket.time << "\tx: " << outPacket.x << "\ty: " << outPacket.y << "\tMode: " << outPacket.mode << "\tvalidity: " << outPacket.validity_flag << "\tIndex: " << outPacket.validity_index << "\n"; } } @@ -164,27 +162,28 @@ int main() for(i = 0; i < 1000; i++) { - fgs.set_params(update, &output); + fgs.set_params(update, &outPacket); update.time = update.time + 0.015625; - if(time != output.time) + if(time != outPacket.time) { - time = output.time; - std::cout << "Packet time: " << output.time << "\tx: " << output.x << "\ty: " << output.y << "\tMode: " << output.mode << "\tvalidity: " << output.validity_flag << "\tIndex: " << output.validity_index << "\n"; + time = outPacket.time; + std::cout << "Packet time: " << outPacket.time << "\tx: " << outPacket.x << "\ty: " << outPacket.y << "\tMode: " << outPacket.mode << "\tvalidity: " << outPacket.validity_flag << "\tIndex: " << outPacket.validity_index << "\n"; } } - + + auto t2 = high_resolution_clock::now(); duration<double, std::milli> ms_double = t2 - t1; - std::cout << "\nSimulating " << output.time << "s took: " << ms_double.count() << "ms\n"; + std::cout << "\nSimulating " << outPacket.time << "s took: " << ms_double.count() << "ms\n"; - std::cout << "Sim is " << output.time / (ms_double.count()/1000) << " times faster than real time!\n"; + std::cout << "Sim is " << outPacket.time / (ms_double.count()/1000) << " times faster than real time!\n"; std::cout << "Mean Measurement for Tracking: \n x: " << sum_x_tra/ctr_tra << "\n y: " << sum_y_tra/ctr_tra << "\n\n"; - std::cout << "Tracking Reference Values: \n x: 484.415mas\n y: 805.169mas\n\n"; + std::cout << "Tracking Reference Values: \n x: 626.992mas\n y: 434.458mas\n\n"; std::cout << "Mean Measurement for Acquisition: \n x: " << sum_x_acq/ctr_acq << "\n y: " << sum_y_acq/ctr_acq << "\n\n"; - std::cout << "Acquisition Reference Values: \n x: 692.876mas\n y: 1093.11mas\n\n"; + std::cout << "Acquisition Reference Values: \n x: 797.934mas\n y: 435.655mas\n\n"; } -- GitLab