LCOV - code coverage report
Current view: top level - synthesis/CalTables - CalDescBuffer.cc (source / functions) Hit Total Coverage
Test: casacpp_coverage.info Lines: 21 120 17.5 %
Date: 2024-12-11 20:54:31 Functions: 4 17 23.5 %

          Line data    Source code
       1             : //# CalDescBuffer.cc: Implementation of CalDescBuffer.h
       2             : //# Copyright (C) 1996,1997,1998,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             : 
      29             : #include <synthesis/CalTables/CalDescBuffer.h>
      30             : 
      31             : using namespace casacore;
      32             : namespace casa { //# NAMESPACE CASA - BEGIN
      33             : 
      34             : //----------------------------------------------------------------------------
      35             : 
      36           1 : CalDescBuffer::CalDescBuffer() :
      37           1 :   connectedToIter_p(false), calDescCol_p(NULL)
      38             : {
      39             : // Null constructor
      40             : // Output to private data:
      41             : //    connectedToIter_p  Bool               true if connected to iterator
      42             : //    calDescCol_p       CalDescColumns*    Ptr to cal_desc col accessor
      43             : //    numSpw_p           Vector<Int>        No. spw
      44             : //    numChan_p          Vector<Int>        No. chan
      45             : //    numReceptors_p     Vector<Int>        No. receptors
      46             : //    nJones_p           Vector<Int>        Jones matrix size
      47             : //    spwId_p            Matrix<Int>        Spw. id.'s
      48             : //    chanFreqMeas_p     Array<MFrequency>  Chan. freq. as Measure
      49             : //    measFreqRef_p      Vector<Int>        Freq. measures ref.
      50             : //    chanWidthQuant_p   Array<Quantity>    Chan. width as Quanta
      51             : //    chanRange_p        Array<Int>         Chan. range
      52             : //    polznType_p        Matrix<String>     Polzn. type
      53             : //    jonesType_p        Vector<String>     Jones matrix type
      54             : //    msName_p           Vector<String>     MeasurementSet name
      55             : //    numSpwOK_p         Bool               No. spw cache ok
      56             : //    numChanOK_p        Bool               No. chan cache ok
      57             : //    numReceptorsOK_p   Bool               No. receptors cache ok
      58             : //    nJonesOK_p         Bool               Jones matrix size cache ok
      59             : //    spwIdOK_p          Bool               Spw. id.'s cache ok
      60             : //    chanFreqMeasOK_p   Bool               Chan. freq. as Measure cache ok
      61             : //    measFreqRefOK_p    Bool               Freq. measures ref. cache ok
      62             : //    chanWidthQuantOK_p Bool               Chan. width as Quanta cache ok
      63             : //    chanRangeOK_p      Bool               Chan. range cache ok
      64             : //    polznTypeOK_p      Bool               Polzn. type cache ok
      65             : //    jonesTypeOK_p      Bool               Jones matrix type cache ok
      66             : //    msNameOK_p         Bool               MeasurementSet name cache ok
      67             : //
      68             :   // Invalidate cache 
      69           1 :   invalidate();
      70           1 : };
      71             : 
      72             : //----------------------------------------------------------------------------
      73             : 
      74           0 : CalDescBuffer::CalDescBuffer (CalIterBase& calIter) :
      75           0 :   connectedToIter_p(true), calDescCol_p(NULL)
      76             : {
      77             : // Construct from a calibration table iterator
      78             : // Input:
      79             : //    calIter            CalIterBase&         Calibration table iterator
      80             : // Output to private data:
      81             : //    connectedToIter_p  Bool               true if connected to iterator
      82             : //    calDescCol_p       CalDescColumns*    Ptr to cal_desc col accessor
      83             : //    numSpw_p           Vector<Int>        No. spw
      84             : //    numChan_p          Vector<Int>        No. chan
      85             : //    numReceptors_p     Vector<Int>        No. receptors
      86             : //    nJones_p           Vector<Int>        Jones matrix size
      87             : //    spwId_p            Matrix<Int>        Spw. id.'s
      88             : //    chanFreqMeas_p     Array<MFrequency>  Chan. freq. as Measure
      89             : //    measFreqRef_p      Vector<Int>        Freq. measures ref.
      90             : //    chanWidthQuant_p   Array<Quantity>    Chan. width as Quanta
      91             : //    chanRange_p        Array<Int>         Chan. range
      92             : //    polznType_p        Matrix<String>     Polzn. type
      93             : //    jonesType_p        Vector<String>     Jones matrix type
      94             : //    msName_p           Vector<String>     MeasurementSet name
      95             : //    numSpwOK_p         Bool               No. spw cache ok
      96             : //    numChanOK_p        Bool               No. chan cache ok
      97             : //    numReceptorsOK_p   Bool               No. receptors cache ok
      98             : //    nJonesOK_p         Bool               Jones matrix size cache ok
      99             : //    spwIdOK_p          Bool               Spw. id.'s cache ok
     100             : //    chanFreqMeasOK_p   Bool               Chan. freq. as Measure cache ok
     101             : //    measFreqRefOK_p    Bool               Freq. measures ref. cache ok
     102             : //    chanWidthQuantOK_p Bool               Chan. width as Quanta cache ok
     103             : //    chanRangeOK_p      Bool               Chan. range cache ok
     104             : //    polznTypeOK_p      Bool               Polzn. type cache ok
     105             : //    jonesTypeOK_p      Bool               Jones matrix type cache ok
     106             : //    msNameOK_p         Bool               MeasurementSet name cache ok
     107             : //
     108             :   // Invalidate cache
     109           0 :   invalidate();
     110             : 
     111             :   // Construct the cal_desc column accessor
     112           0 :   calDescCol_p = newCalDescCol (calIter.subTable());
     113           0 : };
     114             : 
     115             : //----------------------------------------------------------------------------
     116             : 
     117           2 : CalDescBuffer::~CalDescBuffer()
     118             : {
     119             : // Destructor
     120             : // Output to private data:
     121             : //    calDescCol_p       CalDescColumns*      Ptr to cal_desc col accessor
     122             : //
     123           1 :   if (calDescCol_p) delete calDescCol_p;
     124           2 : };
     125             : 
     126             : //----------------------------------------------------------------------------
     127             : 
     128           1 : void CalDescBuffer::invalidate()
     129             : {
     130             : // Invalidate the current cache
     131             : // Output to private data:
     132             : //    numSpwOK_p         Bool               No. spw cache ok
     133             : //    numChanOK_p        Bool               No. chan cache ok
     134             : //    numReceptorsOK_p   Bool               No. receptors cache ok
     135             : //    nJonesOK_p         Bool               Jones matrix size cache ok
     136             : //    spwIdOK_p          Bool               Spw. id.'s cache ok
     137             : //    chanFreqMeasOK_p   Bool               Chan. freq. as Measure cache ok
     138             : //    measFreqRefOK_p    Bool               Freq. measures ref. cache ok
     139             : //    chanWidthQuantOK_p Bool               Chan. width as Quanta cache ok
     140             : //    chanRangeOK_p      Bool               Chan. range cache ok
     141             : //    polznTypeOK_p      Bool               Polzn. type cache ok
     142             : //    jonesTypeOK_p      Bool               Jones matrix type cache ok
     143             : //    msNameOK_p         Bool               MeasurementSet name cache ok
     144             : //
     145             :   // Set all cache flags to false
     146           1 :   numSpwOK_p = false;
     147           1 :   numChanOK_p = false;
     148           1 :   numReceptorsOK_p = false;
     149           1 :   nJonesOK_p = false;
     150           1 :   spwIdOK_p = false;
     151           1 :   chanFreqMeasOK_p = false;
     152           1 :   measFreqRefOK_p = false;
     153           1 :   chanWidthQuantOK_p = false;
     154           1 :   chanRangeOK_p = false;
     155           1 :   polznTypeOK_p = false;
     156           1 :   jonesTypeOK_p = false;
     157           1 :   msNameOK_p = false;
     158           1 : };
     159             : 
     160             : //----------------------------------------------------------------------------
     161             : 
     162           0 : Vector<Int>& CalDescBuffer::numSpw()
     163             : {
     164             : // NUM_SPW data field accessor
     165             : // Input from private data:
     166             : //    connectedToIter_p   Bool                 true if connected to iterator
     167             : //    numSpw_p            Vector<Int>          No. spw
     168             : //
     169             :   // Fill local cache for this column if cache not valid
     170           0 :   if (connectedToIter()) {
     171           0 :     if (!numSpwOK_p) {
     172           0 :       calDescCol()->numSpw().getColumn (numSpw_p);
     173           0 :       numSpwOK_p = true;
     174             :     };
     175             :   };
     176           0 :   return numSpw_p;
     177             : };
     178             : 
     179             : //----------------------------------------------------------------------------
     180             : 
     181           0 : Vector<Int>& CalDescBuffer::numChan()
     182             : {
     183             : // NUM_CHAN data field accessor
     184             : // Input from private data:
     185             : //    connectedToIter_p   Bool                 true if connected to iterator
     186             : //    numChan_p           Vector<Int>          No. chan
     187             : //
     188             :   // Fill local cache for this column if cache not valid
     189           0 :   if (connectedToIter()) {
     190           0 :     if (!numChanOK_p) {
     191           0 :       calDescCol()->numChan().getColumn (numChan_p);
     192           0 :       numChanOK_p = true;
     193             :     };
     194             :   };
     195           0 :   return numChan_p;
     196             : };
     197             : 
     198             : //----------------------------------------------------------------------------
     199             : 
     200           0 : Vector<Int>& CalDescBuffer::numReceptors()
     201             : {
     202             : // NUM_RECEPTORS data field accessor
     203             : // Input from private data:
     204             : //    connectedToIter_p    Bool                 true if connected to iterator
     205             : //    numReceptors_p       Vector<Int>          No. receptors
     206             : //
     207             :   // Fill local cache for this column if cache not valid
     208           0 :   if (connectedToIter()) {
     209           0 :     if (!numReceptorsOK_p) {
     210           0 :       calDescCol()->numReceptors().getColumn (numReceptors_p);
     211           0 :       numReceptorsOK_p = true;
     212             :     };
     213             :   };
     214           0 :   return numReceptors_p;
     215             : };
     216             : 
     217             : //----------------------------------------------------------------------------
     218             : 
     219           0 : Vector<Int>& CalDescBuffer::nJones()
     220             : {
     221             : // N_JONES data field accessor
     222             : // Input from private data:
     223             : //    connectedToIter_p  Bool                 true if connected to iterator
     224             : //    nJones_p           Vector<Int>          No. spw
     225             : //
     226             :   // Fill local cache for this column if cache not valid
     227           0 :   if (connectedToIter()) {
     228           0 :     if (!nJonesOK_p) {
     229           0 :       calDescCol()->nJones().getColumn (nJones_p);
     230           0 :       nJonesOK_p = true;
     231             :     };
     232             :   };
     233           0 :   return nJones_p;
     234             : };
     235             : 
     236             : //----------------------------------------------------------------------------
     237             : 
     238           0 : Matrix<Int>& CalDescBuffer::spwId()
     239             : {
     240             : // NUM_SPW data field accessor
     241             : // Input from private data:
     242             : //    connectedToIter_p  Bool                 true if connected to iterator
     243             : //    spwId_p            Vector<Int>          Spw. id.'s
     244             : //
     245             :   // Fill local cache for this column if cache not valid
     246           0 :   if (connectedToIter()) {
     247           0 :     if (!spwIdOK_p) {
     248           0 :       calDescCol()->spwId().getColumn (spwId_p);
     249           0 :       spwIdOK_p = true;
     250             :     };
     251             :   };
     252           0 :   return spwId_p;
     253             : };
     254             : 
     255             : //----------------------------------------------------------------------------
     256             : 
     257           0 : Array<MFrequency>& CalDescBuffer::chanFreqMeas()
     258             : {
     259             : // CHAN_FREQ data field accessor
     260             : // Input from private data:
     261             : //    connectedToIter_p  Bool                 true if connected to iterator
     262             : //    chanFreqMeas_p     Array<MFrequency>    Chan. freq. as Measure
     263             : //
     264             :   // Fill local cache for this column if cache not valid
     265           0 :   if (connectedToIter()) {
     266           0 :     if (!chanFreqMeasOK_p) {
     267           0 :       uInt nrow = calDescCol()->numSpw().nrow();
     268             : 
     269             :       // Assume fixed shape for Array calibration columns
     270           0 :       Array<MFrequency> rowChanFreq;
     271           0 :       calDescCol()->chanFreqMeas().get (0, rowChanFreq);
     272           0 :       IPosition rowShape = rowChanFreq.shape();
     273           0 :       rowShape.prepend (IPosition(1,nrow));
     274           0 :       chanFreqMeas_p.resize(rowShape);
     275           0 :       IPosition start = rowShape;
     276             :       
     277           0 :       for (uInt row = 0; row < nrow; row++) {
     278           0 :         start(0) = row;
     279           0 :         calDescCol()->chanFreqMeas().get (row, rowChanFreq);
     280           0 :         chanFreqMeas_p(start,rowShape) = rowChanFreq.copy();
     281             :       };
     282           0 :       chanFreqMeasOK_p = true;
     283           0 :     };
     284             :   };
     285           0 :   return chanFreqMeas_p;
     286             : };
     287             : 
     288             : //----------------------------------------------------------------------------
     289             : 
     290           0 : Vector<Int>& CalDescBuffer::measFreqRef()
     291             : {
     292             : // MEAS_FREQ_REF data field accessor
     293             : // Input from private data:
     294             : //    connectedToIter_p  Bool                 true if connected to iterator
     295             : //    measFreqRef_p      Vector<Int>          Measures freq. ref.
     296             : //
     297             :   // Fill local cache for this column if cache not valid
     298           0 :   if (connectedToIter()) {
     299           0 :     if (!measFreqRefOK_p) {
     300           0 :       calDescCol()->measFreqRef().getColumn (measFreqRef_p);
     301           0 :       measFreqRefOK_p = true;
     302             :     };
     303             :   };
     304           0 :   return measFreqRef_p;
     305             : };
     306             : 
     307             : //----------------------------------------------------------------------------
     308             : 
     309           0 : Array<Quantity>& CalDescBuffer::chanWidthQuant()
     310             : {
     311             : // CHAN_WIDTH data field accessor (as Quanta)
     312             : // Input from private data:
     313             : //    connectedToIter_p  Bool                 true if connected to iterator
     314             : //    chanWidthQuant_p   Array<Quantity>      Channel width as Quanta
     315             : //
     316             :   // Fill local cache for this column if cache not valid
     317           0 :   if (connectedToIter()) {
     318           0 :     if (!chanWidthQuantOK_p) {
     319           0 :       uInt nrow = calDescCol()->numSpw().nrow();
     320             : 
     321             :       // Assume fixed shape for Array calibration columns
     322           0 :       Array<Quantity> rowChanWidth;
     323           0 :       calDescCol()->chanWidthQuant().get (0, rowChanWidth);
     324           0 :       IPosition rowShape = rowChanWidth.shape();
     325           0 :       rowShape.prepend (IPosition(1,nrow));
     326           0 :       chanWidthQuant_p.resize(rowShape);
     327           0 :       IPosition start = rowShape;
     328             :       
     329           0 :       for (uInt row = 0; row < nrow; row++) {
     330           0 :         start(0) = row;
     331           0 :         calDescCol()->chanWidthQuant().get (row, rowChanWidth);
     332           0 :         chanWidthQuant_p(start,rowShape) = rowChanWidth.copy();
     333             :       };
     334           0 :       chanWidthQuantOK_p = true;
     335           0 :     };
     336             :   };
     337           0 :   return chanWidthQuant_p;
     338             : };
     339             : 
     340             : //----------------------------------------------------------------------------
     341             : 
     342           0 : Array<Int>& CalDescBuffer::chanRange()
     343             : {
     344             : // CHAN_RANGE data field accessor
     345             : // Input from private data:
     346             : //    connectedToIter_p  Bool                 true if connected to iterator
     347             : //    chanRange_p        Array<Int>           Chan. range
     348             : //
     349             :   // Fill local cache for this column if cache not valid
     350           0 :   if (connectedToIter()) {
     351           0 :     if (!chanRangeOK_p) {
     352           0 :       calDescCol()->chanRange().getColumn (chanRange_p);
     353           0 :       chanRangeOK_p = true;
     354             :     };
     355             :   };
     356           0 :   return chanRange_p;
     357             : };
     358             : 
     359             : //----------------------------------------------------------------------------
     360             : 
     361           0 : Matrix<String>& CalDescBuffer::polznType()
     362             : {
     363             : // POLARIZATION_TYPE data field accessor
     364             : // Input from private data:
     365             : //    connectedToIter_p  Bool                 true if connected to iterator
     366             : //    polznType_p        Vector<String>       Polzn. type
     367             : //
     368             :   // Fill local cache for this column if cache not valid
     369           0 :   if (connectedToIter()) {
     370           0 :     if (!polznTypeOK_p) {
     371           0 :       calDescCol()->polznType().getColumn (polznType_p);
     372           0 :       polznTypeOK_p = true;
     373             :     };
     374             :   };
     375           0 :   return polznType_p;
     376             : };
     377             : 
     378             : //----------------------------------------------------------------------------
     379             : 
     380           0 : Vector<String>& CalDescBuffer::jonesType()
     381             : {
     382             : // JONES_TYPE data field accessor
     383             : // Input from private data:
     384             : //    connectedToIter_p  Bool                 true if connected to iterator
     385             : //    jonesType_p           Vector<String>    Jones matrix type
     386             : //
     387             :   // Fill local cache for this column if cache not valid
     388           0 :   if (connectedToIter()) {
     389           0 :     if (!jonesTypeOK_p) {
     390           0 :       calDescCol()->jonesType().getColumn (jonesType_p);
     391           0 :       jonesTypeOK_p = true;
     392             :     };
     393             :   };
     394           0 :   return jonesType_p;
     395             : };
     396             : 
     397             : //----------------------------------------------------------------------------
     398             : 
     399           0 : Vector<String>& CalDescBuffer::msName()
     400             : {
     401             : // MS_NAME data field accessor
     402             : // Input from private data:
     403             : //    connectedToIter_p  Bool                 true if connected to iterator
     404             : //    msName_p           Vector<String>       MeasurementSet name
     405             : //
     406             :   // Fill local cache for this column if cache not valid
     407           0 :   if (connectedToIter()) {
     408           0 :     if (!msNameOK_p) {
     409           0 :       calDescCol()->msName().getColumn (msName_p);
     410           0 :       msNameOK_p = true;
     411             :     };
     412             :   };
     413           0 :   return msName_p;
     414             : };
     415             : 
     416             : //----------------------------------------------------------------------------
     417             : 
     418             : } //# NAMESPACE CASA - END
     419             : 

Generated by: LCOV version 1.16