# Example of lsst.afw.math.Statistics¶

Start by including needed headers and declaring namespace aliases

```
#include <iostream>
#include <cmath>
#include "lsst/geom.h"
#include "lsst/afw/image/Image.h"
#include "lsst/afw/image/MaskedImage.h"
#include "lsst/afw/math/Statistics.h"
using namespace std;
namespace image = lsst::afw::image;
namespace math = lsst::afw::math;
```

Create an `lsst.afw.image.Image`

```
typedef image::Image<float> ImageF;
int main() {
// First we'll try a regular image
ImageF img(lsst::geom::Extent2I(10, 40));
img = 100000.0;
```

Create a `Statistics`

object from that `Image`

, requesting the number of points, the mean, and the standard deviation.

```
{
math::Statistics stats = math::makeStatistics(img, math::NPOINT | math::MEAN | math::STDEV);
```

And print the desired quantities.
Note that we didn’t request that the error in the mean be calculated, so a `NaN`

is returned.

```
cout << "Npixel: " << stats.getValue(math::NPOINT) << endl;
cout << "Mean: " << stats.getValue(math::MEAN) << endl;
cout << "Error in mean: " << stats.getError(math::MEAN) << " (expect NaN)" << endl;
cout << "Standard Deviation: " << stats.getValue(math::STDEV) << endl << endl;
}
```

Here’s another way to do the same thing.
We use `makeStatistics`

(cf. `std::make_pair()`

) to avoid having to specify what sort of `Statistics`

we’re creating (and in C++0X you’ll be able to say

```
auto stats = math::makeStatistics(img, math::STDEV | math::MEAN | math::ERRORS);
```

which means that we *never* have to provide information that the compiler has up its sleeve — very convenient for generic template programming)

```
{
math::Statistics stats = math::makeStatistics(img, math::STDEV | math::MEAN | math::ERRORS);
```

Print the answers again, but this time return that value and its error as a c std::pair

```
std::pair<double, double> mean = stats.getResult(math::MEAN);
cout << "Mean: " << mean.first << " error in mean: " << mean.second << endl << endl;
}
```

Don’t ask for things that you didn’t request.

```
{
math::Statistics stats = math::makeStatistics(img, math::NPOINT);
try {
stats.getValue(math::MEAN);
} catch (lsst::pex::exceptions::InvalidParameterError &e) {
cout << "You didn't ask for the mean, so we caught an exception: " << e.what() << endl;
}
}
```

be tidy and return success (unnecessary; unlike C, C++ will return this 0 for you automatically)

```
return 0;
}
```