Line data Source code
1 : //# BJonesPoly.h: A bandpass visibility Jones matrix of polynomial form 2 : //# Copyright (C) 1996,1997,1998,1999,2000,2001,2002,2003 3 : //# Associated Universities, Inc. Washington DC, USA. 4 : //# 5 : //# This library is free software; you can redistribute it and/or modify it 6 : //# under the terms of the GNU Library General Public License as published by 7 : //# the Free Software Foundation; either version 2 of the License, or (at your 8 : //# option) any later version. 9 : //# 10 : //# This library is distributed in the hope that it will be useful, but WITHOUT 11 : //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 : //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public 13 : //# License for more details. 14 : //# 15 : //# You should have received a copy of the GNU Library General Public License 16 : //# along with this library; if not, write to the Free Software Foundation, 17 : //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA. 18 : //# 19 : //# Correspondence concerning AIPS++ should be adressed as follows: 20 : //# Internet email: aips2-request@nrao.edu. 21 : //# Postal address: AIPS++ Project Office 22 : //# National Radio Astronomy Observatory 23 : //# 520 Edgemont Road 24 : //# Charlottesville, VA 22903-2475 USA 25 : //# 26 : //# 27 : //# $Id: BJonesPoly.h,v 19.9 2004/11/30 17:50:47 ddebonis Exp $ 28 : 29 : #ifndef SYNTHESIS_BPOLY_H 30 : #define SYNTHESIS_BPOLY_H 31 : 32 : #include <synthesis/MeasurementComponents/SolvableVisCal.h> 33 : #include <synthesis/MeasurementComponents/StandardVisCal.h> 34 : 35 : namespace casa { //# NAMESPACE CASA - BEGIN 36 : 37 : // <summary> A bandpass visibility Jones matrix of polynomial form 38 : // </summary> 39 : 40 : // <use visibility=export> 41 : 42 : // <reviewed reviewer="" date="" tests="" demos=""> 43 : 44 : // <prerequisite> 45 : // <li> <linkto module="BJones">BJones</linkto> module 46 : // </prerequisite> 47 : // 48 : // <etymology> 49 : // BJonesPoly describes a bandpass visibility Jones matrix of 50 : // polynomial form. 51 : // </etymology> 52 : // 53 : // <synopsis> 54 : // 55 : // See <linkto class="VisEquation">VisEquation</linkto> for definition of the 56 : // Visibility Measurement Equation. 57 : // 58 : // The elements of BJonesPoly are only non-zero on the diagonal. 59 : // 60 : // </synopsis> 61 : // 62 : // <motivation> 63 : // Support polynomial bandpass calibration. 64 : // </motivation> 65 : // 66 : // <todo asof="02/02/01"> 67 : // i) Support solution intervals 68 : // </todo> 69 : 70 : class VisEquation; 71 : class VisBuffGroupAcc; 72 : 73 : class BJonesPoly : public BJones { 74 : public: 75 : 76 : // Construct from a visibility data set 77 : BJonesPoly (VisSet& vs); 78 : 79 : // Construct from a MSMetaInfoForCal 80 : BJonesPoly (const MSMetaInfoForCal& msmc); 81 : 82 : // Destructor 83 0 : virtual ~BJonesPoly() {}; 84 : 85 : // Return the type enum 86 0 : virtual Type type() { return VisCal::B; }; 87 : 88 : // Return type name as string 89 0 : virtual casacore::String typeName() { return "BPOLY"; }; 90 0 : virtual casacore::String longTypeName() { return "B Jones Poly (bandpass)"; }; 91 : 92 : // BPOLY gathers generically... 93 0 : virtual casacore::Bool useGenericGatherForSolve() { return true; }; 94 : // ...then solves for itself per solution: 95 0 : virtual casacore::Bool useGenericSolveOne() { return false; }; 96 : 97 : // Type of Jones matrix according to nPar() 98 0 : virtual Jones::JonesType jonesType() { return Jones::Diagonal; }; 99 : 100 : // Set the solver parameters 101 : using BJones::setSolve; 102 : virtual void setSolve(const casacore::Record& solvepar); 103 : 104 : // Set the interpolation parameters 105 : using BJones::setApply; 106 : virtual void setApply(const casacore::Record& applypar); 107 : 108 : // Solve 109 : // (old self-directed gather and solve) 110 : // virtual void selfGatherAndSolve(VisSet& vs, VisEquation& ve); 111 : // (new per-solution self-solving inside generic gather) 112 : virtual void selfSolveOne(VisBuffGroupAcc& vbga); 113 : 114 : 115 : protected: 116 : 117 : // BPOLY has two trivial casacore::Complex parameter (formed at fill) 118 0 : virtual casacore::Int nPar() { return 2; }; 119 : 120 : // Calculate current parameters 121 : virtual void calcPar(); 122 : 123 : virtual void loadMemCalTable (casacore::String applyTable,casacore::String field); 124 : 125 : private: 126 : 127 : // The underlying VisSet 128 : VisSet* vs_p; 129 : 130 : // Private variables containing the solver parameters 131 : casacore::Int degamp_p, degphase_p; 132 : casacore::Bool visnorm_p; 133 : casacore::Int maskcenter_p; 134 : casacore::Float maskedge_p; 135 : 136 : // Derived solver parameters 137 : // Center mask half width (in channels) 138 : casacore::Int maskcenterHalf_p; 139 : // Fractional edge mask 140 : casacore::Float maskedgeFrac_p; 141 : 142 : // Some meta info 143 : casacore::Double solTimeStamp; 144 : casacore::Int solSpwId; 145 : casacore::Int solFldId; 146 : 147 : // CalDescId per spw 148 : casacore::Vector<casacore::Int> calDescId_p; 149 : 150 : // Determine if a given channel is masked 151 : casacore::Bool maskedChannel (const casacore::Int& chan, const casacore::Int& nChan); 152 : 153 : // Update the output calibration table to include the 154 : // current solution parameters 155 : void updateCalTable (const casacore::String& freqGrpName, 156 : const casacore::Vector<casacore::Int>& antennaId, 157 : const casacore::Vector<casacore::String>& polyType, 158 : const casacore::Vector<casacore::Complex>& scaleFactor, 159 : const casacore::Matrix<casacore::Double>& validDomain, 160 : const casacore::Matrix<casacore::Double>& polyCoeffAmp, 161 : const casacore::Matrix<casacore::Double>& polyCoeffPhase, 162 : const casacore::Vector<casacore::String>& phaseUnits, 163 : const casacore::Vector<casacore::Complex>& sideBandRef, 164 : const casacore::Vector<casacore::MFrequency>& refFreq, 165 : const casacore::Vector<casacore::Int>& refAnt); 166 : 167 : // Compute a casacore::Chebyshev polynomial using the CLIC library 168 : casacore::Double getChebVal (const casacore::Vector<casacore::Double>& coeff, const casacore::Double& xinit, 169 : const casacore::Double& xfinal, const casacore::Double& x); 170 : 171 : // Load bandpass parameters from a calibration table and 172 : // pre-compute the corrections (and their inverse) 173 : // void load (const casacore::String& applyTable); 174 : 175 : // Utility function to return the bandwidth-weighted average 176 : // frequency for a set of spectral window id.'s 177 : casacore::Double meanFrequency (const casacore::Vector<casacore::Int>& spwids); 178 : 179 : // Utility function to return the frequency group name for a given spw. id. 180 : casacore::String freqGrpName (const casacore::Int& spwId); 181 : 182 : // Utility function to return the spw id.'s in a given freq. group 183 : casacore::Vector<casacore::Int> spwIdsInGroup (const casacore::String& freqGrpName); 184 : 185 : // Utility function to return the frequency axis for a given spw. id. 186 : casacore::Vector<casacore::Double> freqAxis (const casacore::Int& spwId); 187 : 188 : void plotsolve2(const casacore::Vector<casacore::Double>& x, 189 : const casacore::Matrix<casacore::Double>& ampdata, 190 : const casacore::Matrix<casacore::Double>& phadata, 191 : const casacore::Matrix<casacore::Double>& wtdata, 192 : const casacore::Vector<casacore::Int>& ant1idx, const casacore::Vector<casacore::Int>& ant2idx, 193 : const casacore::Vector<casacore::Double>& amperr, casacore::Matrix<casacore::Double>& ampcoeff, 194 : const casacore::Vector<casacore::Double>& phaerr, casacore::Matrix<casacore::Double>& phacoeff) ; 195 : 196 : }; 197 : 198 : 199 : } //# NAMESPACE CASA - END 200 : 201 : #endif