#include <imageanalysis/ImageAnalysis/SpectralCollapser.h>
#include <imageanalysis/ImageAnalysis/ImageCollapser.h>
#include <casacore/casa/Arrays/ArrayMath.h>
#include <casacore/casa/OS/Directory.h>
#include <casacore/casa/OS/RegularFile.h>
#include <casacore/casa/OS/SymLink.h>
#include <casacore/coordinates/Coordinates/QualityCoordinate.h>
#include <casacore/images/Images/ImageUtilities.h>
#include <imageanalysis/ImageAnalysis/ImageMoments.h>
#include <casacore/images/Images/FITSImage.h>
#include <casacore/images/Images/FITSQualityImage.h>
#include <casacore/images/Images/MIRIADImage.h>
#include <casacore/images/Images/PagedImage.h>
#include <casacore/images/Images/SubImage.h>
#include <casacore/images/Images/TempImage.h>
#include <casacore/lattices/LRegions/LCSlicer.h>
#include <imageanalysis/ImageAnalysis/ImageMoments.h>
using namespace casacore;
SpectralCollapser::SpectralCollapser(const SPCIIF image):
_image(image), _log(new LogIO()), _storePath(""){
SpectralCollapser::SpectralCollapser(const SPCIIF image, const String storePath):
_image(image), _log(new LogIO()), _storePath(storePath){
SpectralCollapser::~SpectralCollapser(){delete _log;}
Bool SpectralCollapser::collapse(const Vector<Float> &specVals, const Float startVal, const Float endVal,
const String &unit, const SpectralCollapser::CollapseType &collType, const SpectralCollapser::CollapseError &collError, String &outname, String &msg){
*_log << LogOrigin("SpectralCollapser", "collapse");
if (specVals.size() < 1){
msg = String("No spectral values provided!");
*_log << LogIO::WARN << msg << LogIO::POST;
if (unit_.find(String("/"))!=String::npos) {
String::size_type slashPos=unit_.find(String("/"));
unit_.replace(slashPos, 1, String("_p_"));
if (specVals(specVals.size()-1)<specVals(0))
Int startIndex, endIndex;
if (endVal < specVals(0)){
msg = String("Start value: ") + String::toString(endVal) + String(" is smaller than all spectral values!");