Commit 7c1792a7157df4eee4e432a9fd8161df2ccc0a24

Authored by Jürgen Knödlseder
1 parent eb766d52

Add sky map value addition and subtraction operators.

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&amp; GSkymap::operator-=(const GSkymap&amp; 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);
... ...