Commit 7c1792a7157df4eee4e432a9fd8161df2ccc0a24
1 parent
eb766d52
Add sky map value addition and subtraction operators.
Showing
4 changed files
with
83 additions
and
8 deletions
include/GSkymap.hpp
| ... | ... | @@ -105,7 +105,9 @@ public: |
| 105 | 105 | GSkymap& operator=(const GSkymap& map); |
| 106 | 106 | GSkymap& operator=(const double& value); |
| 107 | 107 | GSkymap& operator+=(const GSkymap& map); |
| 108 | + GSkymap& operator+=(const double& value); | |
| 108 | 109 | GSkymap& operator-=(const GSkymap& map); |
| 110 | + GSkymap& operator-=(const double& value); | |
| 109 | 111 | GSkymap& operator*=(const GSkymap& map); |
| 110 | 112 | GSkymap& operator*=(const double& factor); |
| 111 | 113 | GSkymap& operator/=(const GSkymap& map); | ... | ... |
pyext/GSkymap.i
| ... | ... | @@ -129,7 +129,9 @@ public: |
| 129 | 129 | |
| 130 | 130 | // Operators |
| 131 | 131 | GSkymap& operator+=(const GSkymap& map); |
| 132 | + GSkymap& operator+=(const double& value); | |
| 132 | 133 | GSkymap& operator-=(const GSkymap& map); |
| 134 | + GSkymap& operator-=(const double& value); | |
| 133 | 135 | GSkymap& operator*=(const GSkymap& map); |
| 134 | 136 | GSkymap& operator*=(const double& factor); |
| 135 | 137 | ... | ... |
src/sky/GSkymap.cpp
| ... | ... | @@ -313,7 +313,7 @@ GSkymap& GSkymap::operator=(const double& value) |
| 313 | 313 | |
| 314 | 314 | |
| 315 | 315 | /***********************************************************************//** |
| 316 | - * @brief Addition operator | |
| 316 | + * @brief Map addition operator | |
| 317 | 317 | * |
| 318 | 318 | * @param[in] map Sky map. |
| 319 | 319 | * @return Sky map. |
| ... | ... | @@ -364,7 +364,30 @@ GSkymap& GSkymap::operator+=(const GSkymap& map) |
| 364 | 364 | |
| 365 | 365 | |
| 366 | 366 | /***********************************************************************//** |
| 367 | - * @brief Subtraction operator | |
| 367 | + * @brief Value addition operator | |
| 368 | + * | |
| 369 | + * @param[in] value Value. | |
| 370 | + * @return Sky map. | |
| 371 | + * | |
| 372 | + * Add @p value to all sky map pixels. | |
| 373 | + ***************************************************************************/ | |
| 374 | +GSkymap& GSkymap::operator+=(const double& value) | |
| 375 | +{ | |
| 376 | + // Set total number of sky map pixels | |
| 377 | + int num = m_num_pixels * m_num_maps; | |
| 378 | + | |
| 379 | + // Loop over all pixels of sky map | |
| 380 | + for (int i = 0; i < num; ++i) { | |
| 381 | + m_pixels[i] += value; | |
| 382 | + } | |
| 383 | + | |
| 384 | + // Return this object | |
| 385 | + return *this; | |
| 386 | +} | |
| 387 | + | |
| 388 | + | |
| 389 | +/***********************************************************************//** | |
| 390 | + * @brief Map subtraction operator | |
| 368 | 391 | * |
| 369 | 392 | * @param[in] map Sky map. |
| 370 | 393 | * @return Sky map. |
| ... | ... | @@ -413,6 +436,30 @@ GSkymap& GSkymap::operator-=(const GSkymap& map) |
| 413 | 436 | return *this; |
| 414 | 437 | } |
| 415 | 438 | |
| 439 | + | |
| 440 | +/***********************************************************************//** | |
| 441 | + * @brief Value subtraction operator | |
| 442 | + * | |
| 443 | + * @param[in] value Value. | |
| 444 | + * @return Sky map. | |
| 445 | + * | |
| 446 | + * Subtracts @p value from all sky map pixels. | |
| 447 | + ***************************************************************************/ | |
| 448 | +GSkymap& GSkymap::operator-=(const double& value) | |
| 449 | +{ | |
| 450 | + // Set total number of sky map pixels | |
| 451 | + int num = m_num_pixels * m_num_maps; | |
| 452 | + | |
| 453 | + // Loop over all pixels of sky map | |
| 454 | + for (int i = 0; i < num; ++i) { | |
| 455 | + m_pixels[i] -= value; | |
| 456 | + } | |
| 457 | + | |
| 458 | + // Return this object | |
| 459 | + return *this; | |
| 460 | +} | |
| 461 | + | |
| 462 | + | |
| 416 | 463 | /***********************************************************************//** |
| 417 | 464 | * @brief Multiplication operator |
| 418 | 465 | * | ... | ... |
test/test_GSky.cpp
| ... | ... | @@ -860,7 +860,7 @@ void TestGSky::test_GSkymap(void) |
| 860 | 860 | } |
| 861 | 861 | } |
| 862 | 862 | total_dst /= 100.0; |
| 863 | - test_value(total_dst, total_src, 1.0e-3, "Test operator+(GSkymap)"); | |
| 863 | + test_value(total_dst, total_src, 1.0e-3, "Test operator+=(GSkymap)"); | |
| 864 | 864 | |
| 865 | 865 | // Subtract pixels from destination map |
| 866 | 866 | map_dst -= map_src; |
| ... | ... | @@ -873,7 +873,7 @@ void TestGSky::test_GSkymap(void) |
| 873 | 873 | total_dst += map_dst(pix,k); |
| 874 | 874 | } |
| 875 | 875 | } |
| 876 | - test_value(total_dst, 0.0, 1.0e-3, "Test operator-(GSkymap)"); | |
| 876 | + test_value(total_dst, 0.0, 1.0e-3, "Test operator-=(GSkymap)"); | |
| 877 | 877 | |
| 878 | 878 | // Check map multiplication |
| 879 | 879 | GSkymap test_map = map_src; |
| ... | ... | @@ -886,7 +886,7 @@ void TestGSky::test_GSkymap(void) |
| 886 | 886 | total_ref += map_src(pix,k) * map_src(pix,k); |
| 887 | 887 | } |
| 888 | 888 | } |
| 889 | - test_value(total_test, total_ref, 1.0e-3, "Test operator*(GSkymap)"); | |
| 889 | + test_value(total_test, total_ref, 1.0e-3, "Test operator*=(GSkymap)"); | |
| 890 | 890 | |
| 891 | 891 | // Check map division |
| 892 | 892 | test_map = map_src; |
| ... | ... | @@ -899,7 +899,7 @@ void TestGSky::test_GSkymap(void) |
| 899 | 899 | total_ref += map_src(pix,k) / map_src(pix,k); |
| 900 | 900 | } |
| 901 | 901 | } |
| 902 | - test_value(total_test, total_ref, 1.0e-3, "Test operator/(GSkymap)"); | |
| 902 | + test_value(total_test, total_ref, 1.0e-3, "Test operator/=(GSkymap)"); | |
| 903 | 903 | |
| 904 | 904 | // Check map scaling |
| 905 | 905 | test_map = map_src; |
| ... | ... | @@ -910,7 +910,7 @@ void TestGSky::test_GSkymap(void) |
| 910 | 910 | total_test += test_map(pix,k); |
| 911 | 911 | } |
| 912 | 912 | } |
| 913 | - test_value(total_test, total_src*3.3, 1.0e-3, "Test operator*(double)"); | |
| 913 | + test_value(total_test, total_src*3.3, 1.0e-3, "Test operator*=(double)"); | |
| 914 | 914 | |
| 915 | 915 | // Check map division |
| 916 | 916 | test_map = map_src; |
| ... | ... | @@ -921,7 +921,31 @@ void TestGSky::test_GSkymap(void) |
| 921 | 921 | total_test += test_map(pix,k); |
| 922 | 922 | } |
| 923 | 923 | } |
| 924 | - test_value(total_test, total_src/3.3, 1.0e-3, "Test operator/(double)"); | |
| 924 | + test_value(total_test, total_src/3.3, 1.0e-3, "Test operator/=(double)"); | |
| 925 | + | |
| 926 | + // Check map value addition | |
| 927 | + test_map = map_src; | |
| 928 | + test_map += 3.3; | |
| 929 | + total_test = 0.0; | |
| 930 | + double ref = total_src + 3.3*test_map.npix()*test_map.nmaps(); | |
| 931 | + for (int pix = 0; pix < test_map.npix(); ++pix) { | |
| 932 | + for (int k = 0; k < test_map.nmaps(); ++k) { | |
| 933 | + total_test += test_map(pix,k); | |
| 934 | + } | |
| 935 | + } | |
| 936 | + test_value(total_test, ref, 1.0e-3, "Test operator+=(double)"); | |
| 937 | + | |
| 938 | + // Check map value subtraction | |
| 939 | + test_map = map_src; | |
| 940 | + test_map -= 3.3; | |
| 941 | + total_test = 0.0; | |
| 942 | + ref = total_src - 3.3*test_map.npix()*test_map.nmaps(); | |
| 943 | + for (int pix = 0; pix < test_map.npix(); ++pix) { | |
| 944 | + for (int k = 0; k < test_map.nmaps(); ++k) { | |
| 945 | + total_test += test_map(pix,k); | |
| 946 | + } | |
| 947 | + } | |
| 948 | + test_value(total_test, ref, 1.0e-3, "Test operator-=(double)"); | |
| 925 | 949 | |
| 926 | 950 | // Save maps |
| 927 | 951 | map_src.save("test_map_src.fits", true); | ... | ... |