Line data Source code
1 : //# VB2CFBMap.h: Definition of the VB2CFBMap class 2 : //# Copyright (C) 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 addressed as follows: 20 : //# Internet email: casa-feedback@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 : //# $Id$ 27 : // 28 : #ifndef SYNTHESIS_TRANSFORM2_VB2CFBMAP_H 29 : #define SYNTHESIS_TRANSFORM2_VB2CFBMAP_H 30 : 31 : #include <casacore/casa/Arrays/Array.h> 32 : #include <casacore/casa/Arrays/Matrix.h> 33 : #include <casacore/casa/Arrays/Vector.h> 34 : #include <msvis/MSVis/VisBuffer2.h> 35 : #include <synthesis/TransformMachines2/CFBuffer.h> 36 : #include <synthesis/TransformMachines2/CFStore2.h> 37 : #include <synthesis/TransformMachines2/BaselineType.h> 38 : #include <casacore/casa/Utilities/CountedPtr.h> 39 : #include <casacore/coordinates/Coordinates/DirectionCoordinate.h> 40 : #include <casacore/images/Images/ImageInterface.h> 41 : #include <casacore/images/Images/TempImage.h> 42 : #include <msvis/MSVis/VisBuffer2.h> 43 : #include <synthesis/MeasurementComponents/SolvableVisCal.h> 44 : #include <synthesis/TransformMachines2/Utils.h> 45 : #include <casacore/casa/OS/Timer.h> 46 : using namespace casacore; 47 : namespace casa { //# NAMESPACE CASA - BEGIN 48 : namespace refim{ 49 : using namespace CFDefs; 50 : class VB2CFBMap 51 : { 52 : public: 53 : VB2CFBMap(); 54 : 55 0 : ~VB2CFBMap() 56 0 : { 57 0 : LogIO log_l(LogOrigin("VB2CFBMap", "~VB2CFMap[R&D]")); 58 : 59 0 : log_l << "Total extra cost of heterogeneous array pointing correction = " << totalCost_p << "sec. Total VBs processed = " << totalVB_p << 60 0 : ". The pointingoffsetsigdev used was = "<< sigmaDev <<LogIO::POST; 61 : 62 0 : }; 63 : 64 : VB2CFBMap& operator=(const VB2CFBMap& other); 65 0 : const casacore::CountedPtr<CFBuffer >& operator[](const int& i) {return vb2CFBMap_p[i];}; 66 : 67 : inline casacore::Vector<casacore::CountedPtr<CFBuffer>>& getVBRow2CFBMap() {return vb2CFBMap_p;}; 68 0 : inline int nelements() {return vb2CFBMap_p.nelements();} 69 : 70 : virtual void setBLNeedsNewPOPG(vector<int>& vbRow2BLMap_p); 71 : 72 0 : virtual casacore::Int mapAntIDToAntType(const casacore::Int& /*ant*/) {return 0;}; 73 : virtual casacore::Int makeVBRow2CFBMap(CFStore2& cfs, 74 : const VisBuffer2& vb, const casacore::Quantity& dPA, 75 : const casacore::Vector<casacore::Int>& dataChan2ImChanMap, 76 : const casacore::Vector<casacore::Int>& dataPol2ImPolMap, 77 : const casacore::CountedPtr<PointingOffsets>& po_p); 78 : /* void setPhaseGradPerRow(const casacore::CountedPtr<PointingOffsets>& po_p, */ 79 : /* const casacore::CountedPtr<CFBuffer>& cfb, */ 80 : /* const vi::VisBuffer2& vb, */ 81 : /* const int& row); */ 82 : /* const Matrix<vector<int> >& antennaGroups); */ 83 : inline casacore::Matrix<casacore::Complex>& getCFPhaseGrad(const int& row)//, const int& ant0, const int& ant1) 84 : {return cfPhaseGrad_p(row);} 85 : virtual casacore::Matrix<casacore::Complex> setBLPhaseGrad(const casacore::CountedPtr<PointingOffsets>& pointingOffsets_p , 86 : const vi::VisBuffer2& vb, 87 : const int& row, 88 : const double& sigmaDev); 89 : 90 : 91 0 : void setDoPointing(const bool& dop=false) {doPointing_p = dop;} 92 0 : void setPOSigmaDev(const vector<float>& sigdev) {sigmaDev = sigdev;} 93 : // protected: 94 : casacore::Vector<casacore::CountedPtr<CFBuffer > > vb2CFBMap_p; 95 : casacore::Vector<casacore::Matrix<casacore::Complex> > cfPhaseGrad_p; 96 : casacore::CountedPtr<BaselineType> baselineType_p; 97 : casacore::Vector< casacore::CountedPtr<PhaseGrad> >vectorPhaseGradCalculator_p; 98 : bool doPointing_p, needsNewPOPG_p, needsNewFieldPG_p; 99 : casacore::Int PO_DEBUG_P, cachedFieldId_p; 100 : /* casacore::Matrix< vector<int> > antennaGroups_p, cachedAntennaGroups_p; */ 101 : /* casacore::Matrix< vector<float> > antennaPO_p, cachedAntennaPO_p; */ 102 : vector<int> vbRow2BLMap_p; 103 : vector<bool> blNeedsNewPOPG_p; 104 : int blType_p; 105 : rownr_t vbRows_p; 106 : /* casacore::Matrix<int> mapAntGrp_p, mapBLGroup_p, cachedmapBLGroup_p; */ 107 : vector<float> sigmaDev = {0.0,0.0}; 108 : casacore::CountedPtr<CFBuffer> cachedCFBPtr_p; 109 : Vector<int> maxCFShape_p; 110 : casacore::Timer timer_p; 111 : float totalCost_p, totalVB_p; 112 : Bool computePhaseScreen_p; 113 : }; 114 : } 115 : } 116 : #endif