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 #ifndef SYNTHESIS_SIIMAGESTOREMULTITERM_H
00028 #define SYNTHESIS_SIIMAGESTOREMULTITERM_H
00029
00030 #include <casa/aips.h>
00031 #include <casa/OS/Timer.h>
00032 #include <casa/Containers/Record.h>
00033 #include <ms/MeasurementSets/MeasurementSet.h>
00034 #include <casa/Arrays/IPosition.h>
00035 #include <casa/Quanta/Quantum.h>
00036 #include <measures/Measures/MDirection.h>
00037 #include <coordinates/Coordinates/CoordinateSystem.h>
00038 #include <coordinates/Coordinates/SpectralCoordinate.h>
00039 #include <images/Images/PagedImage.h>
00040 #include <images/Images/TempImage.h>
00041 #include <images/Images/SubImage.h>
00042 #include <images/Regions/ImageRegion.h>
00043 #include <casa/BasicSL/Constants.h>
00044
00045 #include <synthesis/ImagerObjects/SIImageStore.h>
00046
00047 namespace casa {
00048
00049
00050 class SIImageStoreMultiTerm: public SIImageStore
00051 {
00052 public:
00053
00054
00055 SIImageStoreMultiTerm();
00056 SIImageStoreMultiTerm(String imagename, uInt ntaylorterms=1, const Bool ignorefacets=False);
00057 SIImageStoreMultiTerm(String imagename, CoordinateSystem &imcoordsys,
00058 IPosition imshape, const int nfacets,
00059 const Bool overwrite=False, uInt ntaylorterms=1,Bool useweightimage=False);
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073 SIImageStoreMultiTerm(Block<SHARED_PTR<ImageInterface<Float> > >modelims,
00074 Block<SHARED_PTR<ImageInterface<Float> > >residims,
00075 Block<SHARED_PTR<ImageInterface<Float> > >psfims,
00076 Block<SHARED_PTR<ImageInterface<Float> > >weightims,
00077 Block<SHARED_PTR<ImageInterface<Float> > >restoredims,
00078 Block<SHARED_PTR<ImageInterface<Float> > >sumwtims,
00079 Block<SHARED_PTR<ImageInterface<Float> > >pbims,
00080 Block<SHARED_PTR<ImageInterface<Float> > >restoredpbcorims,
00081 SHARED_PTR<ImageInterface<Float> > newmask,
00082 SHARED_PTR<ImageInterface<Float> > newalpha,
00083 SHARED_PTR<ImageInterface<Float> > newbeta,
00084 SHARED_PTR<ImageInterface<Float> > newalphaerror,
00085 SHARED_PTR<ImageInterface<Float> > newalphapbcor,
00086 SHARED_PTR<ImageInterface<Float> > newbetapbcor,
00087 CoordinateSystem& csys,
00088 IPosition imshape,
00089 String imagename,
00090 const Int facet=0, const Int nfacets=1,
00091 const Int chan=0, const Int nchanchunks=1,
00092 const Int pol=0, const Int npolchunks=1);
00093
00094 virtual void init();
00095
00096 virtual ~SIImageStoreMultiTerm();
00097
00098 virtual String getType(){return "multiterm";}
00099
00100 virtual SHARED_PTR<ImageInterface<Float> > psf(uInt term=0);
00101 virtual SHARED_PTR<ImageInterface<Float> > residual(uInt term=0);
00102 virtual SHARED_PTR<ImageInterface<Float> > weight(uInt term=0);
00103 virtual SHARED_PTR<ImageInterface<Float> > model(uInt term=0);
00104 virtual SHARED_PTR<ImageInterface<Float> > image(uInt term=0);
00105 virtual SHARED_PTR<ImageInterface<Float> > pb(uInt term=0);
00106 virtual SHARED_PTR<ImageInterface<Float> > imagepbcor(uInt term=0);
00107 virtual SHARED_PTR<ImageInterface<Float> > sumwt(uInt term=0);
00109 virtual SHARED_PTR<ImageInterface<Complex> > forwardGrid(uInt term=0);
00110 virtual SHARED_PTR<ImageInterface<Complex> > backwardGrid(uInt term=0);
00111
00112 virtual SHARED_PTR<ImageInterface<Float> > alpha();
00113 virtual SHARED_PTR<ImageInterface<Float> > beta();
00114 virtual SHARED_PTR<ImageInterface<Float> > alphaerror();
00115 virtual SHARED_PTR<ImageInterface<Float> > alphapbcor();
00116 virtual SHARED_PTR<ImageInterface<Float> > betapbcor();
00117
00118
00119
00120 void setModelImage( Vector<String> modelnames );
00121 Vector<String> getModelImageName();
00122
00123 Bool doesImageExist(String imagename);
00124
00125 void resetImages( Bool resetpsf, Bool resetresidual, Bool resetweight );
00126 void addImages( SHARED_PTR<SIImageStore> imagestoadd,
00127 Bool addpsf, Bool addresidual, Bool addweight, Bool adddensity);
00128
00129 void dividePSFByWeight(const Float pblimit=C::minfloat);
00130 void normalizePrimaryBeam(const Float pblimit=C::minfloat);
00131
00132 void divideResidualByWeight(const Float pblimit=C::minfloat, const String normtype="flatnoise");
00133
00134 void divideModelByWeight(const Float pblimit=C::minfloat, const String normtype="flatnoise");
00135 void multiplyModelByWeight(const Float pblimit=C::minfloat, const String normtype="flatnoise");
00136
00137
00138
00139
00140
00141
00142
00143 Bool releaseLocks();
00144
00145 virtual Double getReferenceFrequency();
00146
00147 uInt getNTaylorTerms(Bool dopsf=False);
00148
00149 void restore(GaussianBeam& rbeam, String& usebeam,uInt term=0 );
00150 void calculateAlphaBeta(String imtype);
00151
00152 void pbcor();
00153
00154
00155
00156
00157
00158
00159
00160 SHARED_PTR<SIImageStore> getSubImageStore(const Int facet=0, const Int nfacets=1,
00161 const Int chan=0, const Int nchanchunks=1,
00162 const Int pol=0, const Int npolchunks=1);
00163
00164
00165 virtual Bool hasSensitivity(){return itsWeights.nelements()>0 && itsWeights[0];}
00166
00167 virtual Bool hasModel() {return doesImageExist(itsImageName+imageExts(MODEL)+String(".tt0"));}
00168 virtual Bool hasPsf(){return itsPsfs.nelements()>0 && itsPsfs[0];}
00169 virtual Bool hasResidual() {return itsResiduals.nelements()>0 && itsResiduals[0];}
00170 virtual Bool hasSumWt() {return itsSumWts.nelements()>0 && itsSumWts[0];}
00171
00172
00173
00174
00175
00176
00177 virtual Bool hasResidualImage() {return doesImageExist(itsImageName+imageExts(RESIDUAL)+String(".tt0"));}
00178
00179 virtual Bool hasRestored() {return doesImageExist(itsImageName+imageExts(IMAGE)+String(".tt0"));}
00180 virtual Bool hasPB() {return doesImageExist(itsImageName+imageExts(PB)+String(".tt0"));}
00181
00182
00183
00184
00185 void calcSensitivity();
00186 virtual Bool isModelEmpty();
00187
00188 protected:
00189
00190 virtual void printImageStats();
00191
00192 private:
00193
00194 uInt itsNTerms;
00195
00196 Block<SHARED_PTR<ImageInterface<Float> > > itsPsfs, itsModels, itsResiduals, itsWeights, itsImages, itsSumWts, itsImagePBcors, itsPBs;
00197 Block<SHARED_PTR<ImageInterface<Complex> > > itsForwardGrids, itsBackwardGrids;
00198 SHARED_PTR<ImageInterface<Float> > itsAlpha, itsBeta, itsAlphaError, itsAlphaPBcor, itsBetaPBcor;
00199
00200 Block<SHARED_PTR<ImageInterface<Float> > > itsParentPsfs, itsParentModels, itsParentResiduals, itsParentWeights, itsParentImages, itsParentSumWts, itsParentPBs, itsParentImagePBcors;
00201
00202 };
00203
00204
00205 }
00206
00207 #endif