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
00029 #ifndef SYNTHESIS_PBMOSAICFT_H
00030 #define SYNTHESIS_PBMOSAICFT_H
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #include <synthesis/MeasurementComponents/nPBWProjectFT.h>
00044
00045 namespace casa {
00046
00047 class EPJones;
00048
00049 class PBMosaicFT : public nPBWProjectFT {
00050
00051 public:
00052
00053
00054
00055
00056
00057 PBMosaicFT(MeasurementSet& ms,
00058 Int nFacets, Long cachesize, String& cfCacheDirName,
00059 Bool applyPointingOffset=True,
00060 Bool doPBCorr=True,
00061 Int tilesize=16,
00062 Float paSteps=5.0, Float pbLimit=5e-2,
00063 Bool usezero=False);
00064
00065
00066
00067 PBMosaicFT(const RecordInterface& stateRec);
00068
00069
00070
00071
00072
00073 PBMosaicFT &operator=(const PBMosaicFT &othher);
00074
00075 ~PBMosaicFT() {};
00076
00077 Bool makeAveragePB0(const VisBuffer& vb,
00078 const ImageInterface<Complex>& image,
00079 Int& polInUse,
00080 TempImage<Float>& avgPB);
00081 Int findPointingOffsets(const VisBuffer& vb,
00082 Array<Float> &l_off,
00083 Array<Float> &m_off,
00084 Bool Evaluate);
00085 void normalizeAvgPB();
00086 void normalizePB(ImageInterface<Float> &pb,const Float& nSamp=1);
00087 virtual ImageInterface<Complex>& getImage(Matrix<Float>&, Bool normalize=True);
00088 inline virtual Float pbFunc(Float& a) {return (a);};
00089 void setObservatoryLocation(const MPosition& mLocation) {mLocation_p=mLocation;};
00090 virtual void finalizeToSky();
00091 virtual void initializeToSky(ImageInterface<Complex>& image, Matrix<Float>& weight,
00092 const VisBuffer& vb);
00093 virtual String name() {return "PBMosaicFT";};
00094 virtual Bool verifyShapes(IPosition , IPosition )
00095 {return True;};
00096
00097 private:
00098 Complex nApertures;
00099 Vector<Int> fieldIds_p;
00100 TempImage<Complex> griddedWeights;
00101 Float pbNorm;
00102 virtual void runFortranGet(Matrix<Double>& uvw,Vector<Double>& dphase,
00103 Cube<Complex>& visdata,
00104 IPosition& s,
00105
00106
00107
00108 Int& Conj,
00109 Cube<Int>& flags,Vector<Int>& rowFlags,
00110 Int& rownr,Vector<Double>& actualOffset,
00111 Array<Complex>* dataPtr,
00112 Int& aNx, Int& aNy, Int& npol, Int& nchan,
00113 VisBuffer& vb,Int& Nant_p, Int& scanNo,
00114 Double& sigma,
00115 Array<Float>& raoffsets,
00116 Array<Float>& decoffsets,
00117 Double area,
00118 Int& doGrad,Int paIndex);
00119 virtual void runFortranPut(Matrix<Double>& uvw,Vector<Double>& dphase,
00120 const Complex& visdata_p,
00121 IPosition& s,
00122
00123
00124
00125 Int& Conj,
00126 Cube<Int>& flags,Vector<Int>& rowFlags,
00127 const Matrix<Float>& weight,
00128 Int& rownr,Vector<Double>& actualOffset,
00129 Array<Complex>& dataPtr,
00130 Int& aNx, Int& aNy, Int& npol, Int& nchan,
00131 const VisBuffer& vb,Int& Nant_p, Int& scanNo,
00132 Double& sigma,
00133 Array<Float>& raoffsets,
00134 Array<Float>& decoffsets,
00135 Matrix<Double>& sumWeight,
00136 Double& area,
00137 Int& doGrad,
00138 Int& doPSF,Int paIndex);
00139 virtual void runFortranGetGrad(Matrix<Double>& uvw,Vector<Double>& dphase,
00140 Cube<Complex>& visdata,
00141 IPosition& s,
00142 Cube<Complex>& gradVisAzData,
00143 Cube<Complex>& gradVisElData,
00144
00145 Int& Conj,
00146 Cube<Int>& flags,Vector<Int>& rowFlags,
00147 Int& rownr,Vector<Double>& actualOffset,
00148 Array<Complex>* dataPtr,
00149 Int& aNx, Int& aNy, Int& npol, Int& nchan,
00150 VisBuffer& vb,Int& Nant_p, Int& scanNo,
00151 Double& sigma,
00152 Array<Float>& l_off,
00153 Array<Float>& m_off,
00154 Double area,
00155 Int& doGrad,
00156 Int paIndex);
00157
00158 };
00159
00160 }
00161
00162 #endif