LSSTApplications  10.0+286,10.0+36,10.0+46,10.0-2-g4f67435,10.1+152,10.1+37,11.0,11.0+1,11.0-1-g47edd16,11.0-1-g60db491,11.0-1-g7418c06,11.0-2-g04d2804,11.0-2-g68503cd,11.0-2-g818369d,11.0-2-gb8b8ce7
LSSTDataManagementBasePackage
Statistics

Demonstrate the use of Statistics; the code's in statistics.cc.

Start by including needed headers and declaring namespace aliases

// -*- LSST-C++ -*-
/*
* LSST Data Management System
* Copyright 2008, 2009, 2010 LSST Corporation.
*
* This product includes software developed by the
* LSST Project (http://www.lsst.org/).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the LSST License Statement and
* the GNU General Public License along with this program. If not,
* see <http://www.lsstcorp.org/LegalNotices/>.
*/
#include <iostream>
#include <cmath>
using namespace std;
namespace image = lsst::afw::image;
namespace math = lsst::afw::math;
Create an Image
namespace geom = lsst::afw::geom;
typedef image::Image<float> ImageF;
int main() {
// First we'll try a regular image
ImageF img(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. 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

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

Print the answers again, but this time return that value and its error as a 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.

{
try {
} 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;
}