//# Copyright (C) 1998,1999,2000,2001,2003 //# Associated Universities, Inc. Washington DC, USA. //# //# 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 2 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 GNU General Public License along //# with this program; if not, write to the Free Software Foundation, Inc., //# 675 Massachusetts Ave, Cambridge, MA 02139, USA. //# //# Correspondence concerning AIPS++ should be addressed as follows: //# Internet email: aips2-request@nrao.edu. //# Postal address: AIPS++ Project Office //# National Radio Astronomy Observatory //# 520 Edgemont Road //# Charlottesville, VA 22903-2475 USA //# //# $Id: tSubImage.cc 20567 2009-04-09 23:12:39Z gervandiepen $ #ifndef IMAGEANALYSIS_IMAGESTATSBASE_H #define IMAGEANALYSIS_IMAGESTATSBASE_H #include <imageanalysis/ImageAnalysis/ImageTask.h> #include <imageanalysis/ImageAnalysis/ImageStatsData.h> #include <casacore/images/Images/ImageStatistics.h> #include <casacore/casa/namespace.h> #include <memory> namespace casacore { template <class T> class CountedPtr; } namespace casa { class C11Timer; template <class T> class ImageStatsBase: public ImageTask<T> { // <summary> // This adds configuration methods for statistics classes. // </summary> // <reviewed reviewer="" date="" tests="" demos=""> // </reviewed> // <prerequisite> // </prerequisite> // <etymology> // Image statistics configuration // </etymology> // <synopsis> // This adds configuration methods for statistics classes. // </synopsis> public: ImageStatsBase() = delete; ~ImageStatsBase(); void configureBiweight(casacore::Int maxIter); void configureChauvenet( casacore::Double zscore, casacore::Int maxIterations ); void configureClassical(ImageStatsData::PreferredClassicalAlgorithm p); // configure fit to half algorithm void configureFitToHalf( casacore::FitToHalfStatisticsData::CENTER centerType, casacore::FitToHalfStatisticsData::USE_DATA useData, casacore::Double centerValue ); // configure hinges-fences algorithm void configureHingesFences(casacore::Double f); protected: struct AlgConf { casacore::StatisticsData::ALGORITHM algorithm; // hinges-fences f factor casacore::Double hf; // fit to have center type casacore::FitToHalfStatisticsData::CENTER ct; // fit to half data portion to use casacore::FitToHalfStatisticsData::USE_DATA ud; // fit to half center value T cv; // Chauvenet zscore casacore::Double zs; // Chauvenet/Biweight max iterations casacore::Int mi; }; ImageStatsBase( const SPCIIT image, const casacore::Record *const ®ionPtr, const casacore::String& maskInp, const casacore::String& outname="", casacore::Bool overwrite=false ); casacore::String _configureAlgorithm(); std::unique_ptr<casacore::ImageStatistics<T>>& _getImageStats() { return _statistics; } StatisticsData::ALGORITHM _getAlgorithm() const { return _algConf.algorithm; } AlgConf _getAlgConf() const { return _algConf; } void _resetStats(ImageStatistics<T>* stat=nullptr) { _statistics.reset(stat); } private: std::unique_ptr<casacore::ImageStatistics<T>> _statistics; AlgConf _algConf; ImageStatsData::PreferredClassicalAlgorithm _prefClassStatsAlg = ImageStatsData::AUTO; }; } #ifndef AIPS_NO_TEMPLATE_SRC #include <imageanalysis/ImageAnalysis/ImageStatsBase.tcc> #endif #endif