#include <imageanalysis/IO/ImageProfileFitterResults.h>
#include <casacore/casa/Arrays/ArrayLogical.h>
#include <casacore/casa/Utilities/Precision.h>
#include <casacore/coordinates/Coordinates/DirectionCoordinate.h>
#include <casacore/coordinates/Coordinates/LinearCoordinate.h>
#include <casacore/coordinates/Coordinates/SpectralCoordinate.h>
#include <casacore/coordinates/Coordinates/StokesCoordinate.h>
#include <casacore/images/Images/PagedImage.h>
#include <casacore/scimath/Mathematics/Combinatorics.h>
#include <imageanalysis/ImageAnalysis/ImageCollapser.h>
#include <imageanalysis/ImageAnalysis/ProfileFitResults.h>
#include <imageanalysis/IO/LogFile.h>
using namespace casacore;
const String ImageProfileFitterResults::_class = "ImageProfileFitterResults";
const String ImageProfileFitterResults::_CONVERGED = "converged";
const String ImageProfileFitterResults::_SUCCEEDED = "succeeded";
const String ImageProfileFitterResults::_VALID = "valid";
const uInt ImageProfileFitterResults::_nOthers = 2;
const uInt ImageProfileFitterResults::_gsPlane = 0;
const uInt ImageProfileFitterResults::_lsPlane = 1;
ImageProfileFitterResults::ImageProfileFitterResults(
const std::shared_ptr<LogIO> log, const CoordinateSystem& csysIm,
const Array<std::shared_ptr<ProfileFitResults> >* const &fitters, const SpectralList& nonPolyEstimates,
const std::shared_ptr<const SubImage<Float> > subImage, Int polyOrder, Int fitAxis,
uInt nGaussSinglets, uInt nGaussMultiplets, uInt nLorentzSinglets,
uInt nPLPCoeffs, uInt nLTPCoeffs,
Bool logResults, Bool multiFit, const std::shared_ptr<LogFile> logfile,
const String& xUnit, const String& summaryHeader
) : _logResults(logResults), _multiFit(multiFit),
fitAxis == subImage->coordinates().spectralAxisNumber()
&& Quantity(1, xUnit).isConform("m/s")
&& subImage->coordinates().spectralCoordinate().restFrequency() > 0
), _xUnit(xUnit), _summaryHeader(summaryHeader),
_nGaussSinglets(nGaussSinglets), _nGaussMultiplets(nGaussMultiplets),
_nLorentzSinglets(nLorentzSinglets), _nPLPCoeffs(nPLPCoeffs),_nLTPCoeffs(nLTPCoeffs),
_nonPolyEstimates(nonPolyEstimates), _subImage(subImage), _polyOrder(polyOrder),
_fitAxis(fitAxis), _logfile(logfile), _log(log), _csysIm(csysIm) {}
ImageProfileFitterResults::~ImageProfileFitterResults() {}
Record ImageProfileFitterResults::getResults() const {
void ImageProfileFitterResults::createResults() {
std::unique_ptr<vector<vector<Array<Double> > > > ImageProfileFitterResults::_createPCFArrays() const {
std::unique_ptr<vector<vector<Array<Double> > > > pcfArrays(
new vector<vector<Array<Double> > >(
NGSOLMATRICES, vector<Array<Double> >(_nGaussMultiplets+_nOthers)