00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef SYNTHESIS_FEATHER_H
00029 #define SYNTHESIS_FEATHER_H
00030
00031 #include <casa/BasicSL/String.h>
00032 #include <casa/BasicSL.h>
00033 #include <casa/Quanta/Quantum.h>
00034 #include <scimath/Mathematics/GaussianBeam.h>
00035 #include <coordinates/Coordinates/CoordinateSystem.h>
00036
00037 namespace casa {
00038
00039 template<class T> class ImageInterface;
00040 template<class T> class Vector;
00041
00042
00043 class Feather{
00044
00045 public:
00046
00047
00048 Feather();
00049
00050 Feather(const ImageInterface<Float>& SDImage, const ImageInterface<Float>& INTImage, Float sdScale=1.0);
00051
00052 virtual ~Feather();
00053
00054
00055
00056 void clearWeightFlags();
00057
00058
00059 void setSDScale(Float sdscale=1.0);
00060 void setSDImage(const ImageInterface<Float>& SDImage);
00061 void setINTImage(const ImageInterface<Float>& IntImage);
00062
00063
00064
00065 Bool setEffectiveDishDiam(const Float xdiam, const Float ydiam=-1.0);
00066 void getEffectiveDishDiam(Float& xdiam, Float& ydiam);
00067
00068
00069
00070 void getFTCutSDImage(Vector<Float>& ux, Vector<Float>& xamp, Vector<Float>& uy, Vector<Float>& yamp, const Bool radial=False );
00071 void getFTCutIntImage(Vector<Float>& ux, Vector<Float>& xamp, Vector<Float>& uy, Vector<Float>& yamp, Bool radial=False);
00072
00073
00074
00075 void getFeatherSD(Vector<Float>& ux, Vector<Float>& xamp, Vector<Float>& uy, Vector<Float>& yamp, Bool radial=False, Bool normalize=True);
00076 void getFeatherINT(Vector<Float>& ux, Vector<Float>& xamp, Vector<Float>& uy, Vector<Float>& yamp, Bool radial=False);
00077
00078
00079
00080 void getFeatheredCutSD(Vector<Float>& ux, Vector<Float>& xamp, Vector<Float>& uy, Vector<Float>& yamp, Bool radial=False);
00081 void getFeatheredCutINT(Vector<Float>& ux, Vector<Float>& xamp, Vector<Float>& uy, Vector<Float>& yamp, Bool radial=False);
00082
00083
00084 void convolveINT(const GaussianBeam& newHighBeam);
00085
00086
00087 Bool saveFeatheredImage(const String& imagename);
00089 static void getCutXY(Vector<Float>& ux, Vector<Float>& xamp,
00090 Vector<Float>& uy, Vector<Float>& yamp,
00091 const ImageInterface<Float>& image);
00092 static void getRadialCut(Vector<Float>& radius, Vector<Float>& radialAmp,
00093 const ImageInterface<Float>& image);
00094
00095
00097 static void feather(const String& image, const ImageInterface<Float>& high, const ImageInterface<Float>& low, const Float& sdScale=1.0, const String& lowPSF="", const Bool useDefault=True, const String& vpTable="" , Float effSDDiam=-1.0, const Bool lowpassfiltersd=False);
00098
00099 static Double worldFreq(const CoordinateSystem& cs, Int spectralpix=0);
00100
00101
00102 private:
00103 void fillXVectors( Vector<Float>& ux, Vector<Float>& uy ) const;
00104 static void applyDishDiam(ImageInterface<Complex>& image, GaussianBeam& beam, Float effDiam, ImageInterface<Float>& newbeam, Vector<Quantity>& extraconv);
00105
00106
00107
00108
00109 CountedPtr<ImageInterface<Float> > lowIm_p;
00110 CountedPtr<ImageInterface<Float> > lowImOrig_p;
00111 CountedPtr<ImageInterface<Float> > highIm_p;
00112 CountedPtr<ImageInterface<Complex> > cwImage_p;
00113 CountedPtr<ImageInterface<Complex> > cwHighIm_p;
00114 static void getCutXY(Vector<Float>& ux, Vector<Float>& xamp,
00115 Vector<Float>& uy, Vector<Float>& yamp, ImageInterface<Complex>& ftimage);
00116 static void getRadialCut(Vector<Float>& radialAmp, ImageInterface<Complex>& ftimage);
00117
00118 static void getLowBeam(const ImageInterface<Float>& low0, const String& lowPSF, const Bool useDefaultPB, const String& vpTableStr, GaussianBeam& lBeam);
00119 void calcCWeightImage();
00120 void applyFeather();
00121 static void getRadialUVval(const Int npix, const IPosition& imshape, const CoordinateSystem& csys, Vector<Float>& radius);
00122 GaussianBeam hBeam_p;
00123 GaussianBeam lBeam_p;
00124 GaussianBeam lBeamOrig_p;
00125 Float dishDiam_p;
00126 Bool cweightCalced_p;
00127 Bool cweightApplied_p;
00128 Float sdScale_p;
00129 CoordinateSystem csysHigh_p;
00130 };
00131
00132
00133
00134 }
00135
00136 #endif