LCOV - code coverage report
Current view: top level - msvis/MSVis - MsAverager.h (source / functions) Hit Total Coverage
Test: casacpp_coverage.info Lines: 0 1 0.0 %
Date: 2024-12-11 20:54:31 Functions: 0 0 -

          Line data    Source code
       1             : //# MsAverager.h: Measurement Sets (Visiablity Averager)
       2             : //# Copyright (C) 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             : //#
      27             : //#
      28             : //# -------------------------------------------------------------------------
      29             : 
      30             : #if !defined MSAVERAGER_H
      31             : #define MSAVERAGER_H
      32             : 
      33             : 
      34             : #include <casacore/casa/aips.h>
      35             : 
      36             : #include <casacore/tables/Tables/SetupNewTab.h>
      37             : //#include <tables/Tables/Table.h>
      38             : #include <casacore/tables/Tables/MemoryTable.h>
      39             : #include <casacore/tables/Tables/TableDesc.h>
      40             : #include <casacore/tables/DataMan/StManAipsIO.h>
      41             : 
      42             : #include <casacore/ms/MeasurementSets/MSColumns.h>
      43             : #include <casacore/ms/MeasurementSets/MeasurementSet.h>
      44             : 
      45             : #include <list>
      46             : 
      47             : #include <msvis/MSVis/VisBuffer.h>
      48             : #include <msvis/MSVis/VisibilityIterator.h>
      49             : #include <msvis/MSVis/VisSet.h>
      50             : //#include <msvis/MSVis/SubMS.h>
      51             : #include <msvis/MSVis/SelectAverageSpw.h>
      52             : 
      53             : 
      54             : 
      55             : ///////////////////////////////////////////////////////////////////////////////
      56             : //# Start of documentation.    
      57             : //
      58             : // <summary>
      59             : // A class to average a visibilty data set in time and/or channel
      60             : // </summary>
      61             : //
      62             : // <use visibility=export>
      63             : //
      64             : // <reviewed reviewer="Me" date="2007/12/25" tests="" demos="">
      65             : // </reviewed>
      66             : 
      67             : // <prerequisite>
      68             : //   <li> VisBuffer
      69             : //   <li> MeasurementSet
      70             : // </prerequisite>
      71             : //
      72             : // <etymology>
      73             : // From "visibility", "time", "channel", "polarization" and "averaging".
      74             : // </etymology>
      75             : //
      76             : // <synopsis>
      77             : // This class averages VisBuffers in time, channel.
      78             : // </synopsis>
      79             : //
      80             : // <example>
      81             : //   casacore::MS ms("ngc5921.ms" casacore::Table::Update);
      82             : //   MsAverager msa(ms);
      83             : //   //chanlist is matrix of int its rows [spwid, start, end, step] 
      84             : //   msa.setAverager(chanlist, 90, 32, "data", "SCALAR");
      85             : //   if (msa.ok()) { 
      86             : //      casacore::MS avems;
      87             : //      msa.getMS(avems);   
      88             : //   }
      89             : //   
      90             : // </example>
      91             : //
      92             : // <motivation>
      93             : // Provide time/channel averaging capabilities for plotxy. 
      94             : // </motivation>
      95             : //
      96             : // <thrown>
      97             : //    <li>
      98             : //    <li>
      99             : // </thrown>
     100             : //
     101             : // <todo asof="2007/12/25">
     102             : //   <li> everything, and
     103             : //   <li> everything else
     104             : // </todo>
     105             : 
     106             : //# End of documentation.    
     107             : ///////////////////////////////////////////////////////////////////////////////
     108             : 
     109             : namespace casa {
     110             : 
     111             : 
     112             : class MsAverager
     113             : {
     114             : 
     115             : public:
     116             :    enum OutputMode {
     117             :      TableMS = 1,   
     118             :      ListBuffer
     119             :    };
     120             : 
     121             :    MsAverager(casacore::MS*, OutputMode = MsAverager::TableMS);
     122             :    ~MsAverager();
     123             : 
     124             :    void reset(casacore::MS*, OutputMode = MsAverager::TableMS);
     125             :    void getMS(casacore::MS& ms);
     126             :    void getXY(casacore::Vector<casacore::Double>& x, casacore::Vector<casacore::Double>& y, 
     127             :               casacore::Vector<casacore::Int>& f, casacore::Int pol);
     128             :    void getMap(casacore::Matrix<casacore::Int>& rowMap, casacore::Matrix<casacore::Int>& chanMap);
     129             :     
     130             :    //average engine and its status 
     131             :    void setAverager(
     132             :               const casacore::Matrix<casacore::Int>& chanList,
     133             :               const casacore::Matrix<casacore::Int>& baselines,
     134             :               casacore::Double aveTime, casacore::Int aveChan,
     135             :               const casacore::String& column = "DATA",
     136             :               const casacore::String& aveMode = "VECTOR",
     137             :               const casacore::Bool& aveFlag = false,
     138             :               const casacore::Bool& aveScan = false,
     139             :               const casacore::Bool& aveBline = false,
     140             :               const casacore::Bool& aveArray = false,
     141             :               const casacore::Bool& aveVelo = false,
     142             :               const casacore::String& restfreq = "",
     143             :               const casacore::String& frame = "",
     144             :               const casacore::String& doppler = "");
     145             :    casacore::Bool ok() {return aveOK;}
     146             :    casacore::Int outputFormat() {return outputMode;}
     147             : 
     148             :    void showColumnNames();
     149             :    casacore::Bool isDataColumn(const casacore::String& colNmae);
     150             :    casacore::Bool hasColumn(const casacore::String& colName);
     151             :    static casacore::Int baselineRow(const casacore::Int& nAnt, const casacore::Int& a, const casacore::Int& b); 
     152           0 :    casacore::Int baselineRow(const casacore::Int& a = -1, const casacore::Int& b = -1); 
     153             : 
     154             :    void putAveBuffer(casacore::Double bufTime, casacore::Int bufField, casacore::Int bufScan,
     155             :                      casacore::Int bufArray, VisBuffer& p, casacore::Int nTime);
     156             :    void initAveBuffer(casacore::Double bufTime, VisBuffer& p, casacore::Int nAnt, casacore::Int nChan);
     157             :    void putAveTable(casacore::Double bufTime, casacore::Int bufField, casacore::Int bufScan,
     158             :                     casacore::Int bufArray, casacore::Int bufSpw, VisBuffer& p, casacore::Int nTime, 
     159             :                     casacore::Double timeShift);
     160             :    void showVisRow(casacore::Cube<casacore::Complex>& vc, casacore::Int row);
     161             :    void showMsRow(casacore::MSMainColumns* msc, casacore::Int row);
     162             :    void showAveMap(casacore::Matrix<casacore::Int>& rmap, casacore::Matrix<casacore::Int>& cmap);
     163             : 
     164             :    const static casacore::String DataColumn[4];
     165             :    casacore::Int npol() {return nAvePol;}
     166             :    casacore::Int nchan() {return nAveChan;}
     167             :    casacore::Int nAnt() {return nAntenna;}
     168             : 
     169             : private:
     170             :    //to be averaged
     171             :    void cleanup();
     172             :    casacore::MS* pMS;
     173             :    VisSet* vs;
     174             :    casacore::String msName;
     175             :    //casacore::MSDerivedValues *msdv;
     176             : 
     177             :    //averaged, store as MS
     178             :    casacore::MS aMS;
     179             :    casacore::Int msRow;
     180             :    casacore::MSMainColumns *msc;
     181             :    //casacore::MSColumns *msc;
     182             :    
     183             :    //averaged, store as VBs 
     184             :    VisBuffer* pAveBuff;
     185             :    std::list<VisBuffer*> aveList;
     186             : 
     187             :    //averaging inputs, ideally, calculate only needed column
     188             :    casacore::String column;
     189             : 
     190             :    //selected channels for each piece for spw expression
     191             :    //each row contains [spwid, start, end, stride]
     192             :    //may contains multiple rows of same spwid
     193             :    casacore::Matrix<casacore::Int> chanList;
     194             : 
     195             :    casacore::Vector<SAS> spw;
     196             : 
     197             :    //map between averaged and original 
     198             :    casacore::Matrix<casacore::Int> aveChanMap;
     199             :    //casacore::Matrix<casacore::Double> aveTimeMap;
     200             :    casacore::Matrix<casacore::Int> aveRowMap;
     201             : 
     202             :    //averaging requirements
     203             :    casacore::String aveMode;
     204             :    casacore::Double aveTime;
     205             :    casacore::Int aveChan;
     206             :    casacore::Bool aveFlag;
     207             :    casacore::Bool crossScans;
     208             :    casacore::Bool crossBlines;
     209             :    casacore::Bool crossArrays;
     210             :    casacore::Bool crossSpws;
     211             :    casacore::Bool aveVel;
     212             :    casacore::Bool sorryVel;
     213             :    casacore::Matrix<casacore::Int> baselines;
     214             : 
     215             :    //size of the averaged
     216             :    casacore::Int nAveChan;
     217             :    casacore::Int nAveTime;
     218             :    casacore::Int nAveRow;
     219             :    casacore::Int nAvePol;
     220             :    casacore::Int nAntenna;
     221             : 
     222             :    casacore::String restfreq;
     223             :    casacore::String frame;
     224             :    casacore::String doppler;
     225             : 
     226             :    casacore::Bool aveOK;
     227             : 
     228             :    //utility
     229             :    static const casacore::String clname;
     230             :    //SLog *log;
     231             : 
     232             :    int outputMode;
     233             : 
     234             :   
     235             : };
     236             : 
     237             : 
     238             : } 
     239             : #endif
     240             : 
     241             : 

Generated by: LCOV version 1.16