Line data Source code
1 : #ifndef IMAGES_IMAGECOLLAPSER_H 2 : #define IMAGES_IMAGECOLLAPSER_H 3 : 4 : #include <imageanalysis/ImageAnalysis/ImageTask.h> 5 : 6 : #include <imageanalysis/ImageAnalysis/ImageCollapserData.h> 7 : 8 : #include <casacore/casa/namespace.h> 9 : 10 : namespace casacore{ 11 : 12 : template <class T> class TempImage; 13 : template <class T> class SubImage; 14 : } 15 : 16 : namespace casa { 17 : 18 : 19 : template <class T> class ImageCollapser : public ImageTask<T> { 20 : // <summary> 21 : // Top level interface which allows collapsing of images along a single axis. An aggregate method 22 : // (average, sum, etc) is applied to the collapsed pixels. 23 : // </summary> 24 : 25 : // <reviewed reviewer="" date="" tests="" demos=""> 26 : // </reviewed> 27 : 28 : // <prerequisite> 29 : // </prerequisite> 30 : 31 : // <etymology> 32 : // Collapses image. 33 : // </etymology> 34 : 35 : // <synopsis> 36 : // High level interface for collapsing an image along a single axis. 37 : // </synopsis> 38 : 39 : // <example> 40 : // <srcblock> 41 : // ImageCollapser collapser(...); 42 : // collapser.collapse(); 43 : // </srcblock> 44 : // </example> 45 : 46 : public: 47 : 48 : // if <src>outname</src> is empty, no image will be written 49 : // if <src>overwrite</src> is True, if image already exists it will be removed 50 : // if <src>overwrite</src> is False, if image already exists exception will be thrown 51 : // 52 : // <group> 53 : 54 : ImageCollapser( 55 : const casacore::String& aggString, SPCIIT image, 56 : const casacore::Record *const regionRec, 57 : const casacore::String& maskInp, const casacore::IPosition& axes, 58 : casacore::Bool invertAxesSelection, 59 : const casacore::String& outname, casacore::Bool overwrite 60 : ); 61 : 62 : ImageCollapser( 63 : const SPCIIT image, 64 : const casacore::IPosition& axes, casacore::Bool invertAxesSelection, 65 : const ImageCollapserData::AggregateType aggregateType, 66 : const casacore::String& outname, casacore::Bool overwrite 67 : ); 68 : // </group> 69 : 70 0 : ~ImageCollapser() {} 71 : 72 : // perform the collapse and return the resulting image. 73 : SPIIT collapse() const; 74 : 75 0 : casacore::String getClass() const { const static casacore::String name = "ImageCollapser"; return name; } 76 : 77 : protected: 78 0 : inline CasacRegionManager::StokesControl _getStokesControl() const { 79 0 : return CasacRegionManager::USE_ALL_STOKES; 80 : } 81 : 82 0 : inline std::vector<casacore::Coordinate::Type> _getNecessaryCoordinates() const { 83 0 : return std::vector<casacore::Coordinate::Type>(); 84 : } 85 : 86 0 : casacore::Bool _supportsMultipleRegions() const {return true;} 87 : 88 : private: 89 : casacore::Bool _invertAxesSelection; 90 : casacore::IPosition _axes; 91 : ImageCollapserData::AggregateType _aggType; 92 : 93 : // disallow default constructor 94 : ImageCollapser(); 95 : 96 : void _doFluxUnits( 97 : casacore::TempImage<T>& tmpIm, 98 : const std::shared_ptr<const casacore::SubImage<T>> subImage 99 : ) const; 100 : 101 : void _invert(); 102 : 103 : void _finishConstruction(); 104 : 105 : void _checkFlux(SPCIIT subImage) const; 106 : 107 : void _doDegenerateAxesCase( 108 : casacore::TempImage<T>& tmpIm, SPCIIT subImage 109 : ) const; 110 : 111 : void _doLowPerf( 112 : TempImage<T>& tmpIm, SPCIIT subImage, T npixPerBeam 113 : ) const; 114 : 115 : // necessary to improve performance 116 : void _doHighPerf(SPCIIT image, casacore::TempImage<T>& outImage) const; 117 : 118 : // returns true if miscellaneous info was copied 119 : Bool _doMultipleBeams( 120 : TempImage<T>& tmpIm, SPCIIT subImage, Bool hasDir, 121 : const CoordinateSystem& outCoords 122 : ) const; 123 : 124 : void _doOtherStats(TempImage<T>& tmpIm, SPCIIT subImage) const; 125 : 126 : LatticeStatsBase::StatisticsTypes _getStatsType() const; 127 : 128 : static void _zeroNegatives(casacore::Array<T>& arr); 129 : 130 : }; 131 : } 132 : 133 : #ifndef AIPS_NO_TEMPLATE_SRC 134 : #include <imageanalysis/ImageAnalysis/ImageCollapser.tcc> 135 : #endif //# AIPS_NO_TEMPLATE_SRC 136 : 137 : #endif