LCOV - code coverage report
Current view: top level - mstransform/TVI - ChannelAverageTVI.h (source / functions) Hit Total Coverage
Test: casacpp_coverage.info Lines: 5 6 83.3 %
Date: 2024-12-11 20:54:31 Functions: 5 6 83.3 %

          Line data    Source code
       1             : //# ChannelAverageTVI.h: This file contains the interface definition of the MSTransformManager class.
       2             : //#
       3             : //#  CASA - Common Astronomy Software Applications (http://casa.nrao.edu/)
       4             : //#  Copyright (C) Associated Universities, Inc. Washington DC, USA 2011, All rights reserved.
       5             : //#  Copyright (C) European Southern Observatory, 2011, All rights reserved.
       6             : //#
       7             : //#  This library is free software; you can redistribute it and/or
       8             : //#  modify it under the terms of the GNU Lesser General Public
       9             : //#  License as published by the Free software Foundation; either
      10             : //#  version 2.1 of the License, or (at your option) any later version.
      11             : //#
      12             : //#  This library is distributed in the hope that it will be useful,
      13             : //#  but WITHOUT ANY WARRANTY, without even the implied warranty of
      14             : //#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      15             : //#  Lesser General Public License for more details.
      16             : //#
      17             : //#  You should have received a copy of the GNU Lesser General Public
      18             : //#  License along with this library; if not, write to the Free Software
      19             : //#  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
      20             : //#  MA 02111-1307  USA
      21             : //# $Id: $
      22             : 
      23             : #ifndef ChannelAverageTVI_H_
      24             : #define ChannelAverageTVI_H_
      25             : 
      26             : // Base class
      27             : #include <mstransform/TVI/FreqAxisTVI.h>
      28             : 
      29             : //#define REPORT_TIMING
      30             : 
      31             : namespace casa { //# NAMESPACE CASA - BEGIN
      32             : 
      33             : namespace vi { //# NAMESPACE VI - BEGIN
      34             : 
      35             : //////////////////////////////////////////////////////////////////////////
      36             : // ChannelAverageTVI class
      37             : //////////////////////////////////////////////////////////////////////////
      38             : 
      39             : class ChannelAverageTVI : public FreqAxisTVI
      40             : {
      41             : 
      42             : public:
      43             : 
      44             :         ChannelAverageTVI(ViImplementation2 * inputVii, const casacore::Record &configuration);
      45             :         // Report the the ViImplementation type
      46           0 :         virtual casacore::String ViiType() const override { return casacore::String("ChannelAverage( ")+getVii()->ViiType()+" )"; };
      47             : 
      48             : #ifdef _OPENMP
      49         292 :   virtual void originChunks(casacore::Bool forceRewind) {  
      50         292 :     Tfl_=Tws_=Tss_=Tcd_=Tmd_=Tchave_=0.0;  getVii()->originChunks(forceRewind); } 
      51             :  #ifdef REPORT_TIMING
      52             :   virtual ~ChannelAverageTVI() {
      53             :     cout << "ChannelAverageTVI: " << endl
      54             :          << " T_flagCube            =" << Tfl_ << endl 
      55             :          << " T_weightSpectrum      =" << Tws_ << endl
      56             :          << " T_sigmaSpectrum       =" << Tss_ << endl
      57             :          << " T_visibilityCorrected =" << Tcd_ << endl
      58             :          << " T_visibilityModel     =" << Tmd_ << endl
      59             :          << " T_total               =" << Tfl_+Tws_+Tss_+Tcd_+Tmd_
      60             :          << endl;
      61             :   }
      62             :  #endif
      63             : #endif
      64             : 
      65             :     void flag(casacore::Cube<casacore::Bool>& flagCube) const override;
      66             :     void floatData (casacore::Cube<casacore::Float> & vis) const override;
      67             :     void visibilityObserved (casacore::Cube<casacore::Complex> & vis) const override;
      68             :     void visibilityCorrected (casacore::Cube<casacore::Complex> & vis) const override;
      69             :     void visibilityModel (casacore::Cube<casacore::Complex> & vis) const override;
      70             :     void weightSpectrum(casacore::Cube<casacore::Float> &weightSp) const override;
      71             :     void sigmaSpectrum (casacore::Cube<casacore::Float> &sigmaSp) const override;
      72             : 
      73      395416 :     casacore::Bool weightSpectrumExists () const override {return true;}
      74      380350 :     casacore::Bool sigmaSpectrumExists () const override {return true;}
      75             :     
      76             :     casacore::Vector<casacore::Double> getFrequencies (   casacore::Double time, casacore::Int frameOfReference,
      77             :                                                                 casacore::Int spectralWindowId, casacore::Int msId) const override;
      78             :     casacore::Vector<casacore::Double> getChanWidths ( casacore::Double time, casacore::Int frameOfReference,
      79             :                                                                 casacore::Int spectralWindowId, casacore::Int msId) const override;
      80             : 
      81             : 
      82             :     void writeFlag (const casacore::Cube<casacore::Bool> & flag) override;
      83             : 
      84             : protected:
      85             : 
      86             :     void propagateChanAvgFlags (const casacore::Cube<casacore::Bool> &avgFlagCube, casacore::Cube<casacore::Bool> &expandedFlagCube);
      87             :     casacore::Bool parseConfiguration(const casacore::Record &configuration);
      88             :     void initialize();
      89             : 
      90             :         casacore::Vector<casacore::Int> chanbin_p;
      91             :         // (back)propagate flags as flagdata likes it (CAS-12737): existing ones are always preserved
      92             :         bool flagdataFlagPropagation_p;
      93             :         mutable std::map<casacore::Int,casacore::uInt > spwChanbinMap_p; // Must be accessed from const methods
      94             : 
      95             : #ifdef _OPENMP
      96             :   mutable casacore::Double Tfl_,Tws_,Tcd_,Tmd_,Tss_,Tchave_;
      97             : #endif
      98             : };
      99             : 
     100             : //////////////////////////////////////////////////////////////////////////
     101             : // ChannelAverageTVIFactory class
     102             : //////////////////////////////////////////////////////////////////////////
     103             : 
     104             : class ChannelAverageTVIFactory : public ViFactory
     105             : {
     106             : 
     107             : public:
     108             : 
     109             :         ChannelAverageTVIFactory(casacore::Record &configuration,
     110             :                                  ViImplementation2 *inputVII);
     111             : 
     112             : protected:
     113             : 
     114             :         vi::ViImplementation2 * createVi () const;
     115             : 
     116             :         casacore::Record configuration_p;
     117             :         ViImplementation2 *inputVii_p;;
     118             : };
     119             : 
     120             : //////////////////////////////////////////////////////////////////////////
     121             : // ChannelAverageTVILayerFactory class  (for _recursive_ layering)
     122             : //////////////////////////////////////////////////////////////////////////
     123             : 
     124             : class ChannelAverageTVILayerFactory : public ViiLayerFactory
     125             : {
     126             : 
     127             : public:
     128             : 
     129             :   ChannelAverageTVILayerFactory(casacore::Record &configuration);
     130             : 
     131         230 :   virtual ~ChannelAverageTVILayerFactory() {};
     132             : 
     133             : protected:
     134             : 
     135             :   
     136             :   virtual ViImplementation2 * createInstance(ViImplementation2* vii0) const;
     137             : 
     138             :   const casacore::Record configuration_p;
     139             : 
     140             : };
     141             : 
     142             : //////////////////////////////////////////////////////////////////////////
     143             : // ChannelAverageTransformEngine class
     144             : //////////////////////////////////////////////////////////////////////////
     145             : 
     146             : 
     147             : template<class T> class ChannelAverageKernel; // Forward declaration
     148             : 
     149             : template<class T> class ChannelAverageTransformEngine : public FreqAxisTransformEngine2<T>
     150             : {
     151             : 
     152             :         using FreqAxisTransformEngine2<T>::inputData_p;
     153             :         using FreqAxisTransformEngine2<T>::outputData_p;
     154             : 
     155             : public:
     156             : 
     157             :         ChannelAverageTransformEngine   (       ChannelAverageKernel<T> *kernel,
     158             :                                                                                 DataCubeMap *inputData,
     159             :                                                                                 DataCubeMap *outputData,
     160             :                                                                                 casacore::uInt width);
     161             : 
     162             :   // package transformation of all corr,row spectra in the in/outputData_p
     163             :   // gmoellen (2017Mar06)
     164             :   void transformAll();
     165             : 
     166             :         void transform();
     167             : 
     168             : protected:
     169             : 
     170             :         casacore::uInt width_p;
     171             :         // This member has to be a pointer, otherwise there
     172             :         // are compile time problems due to the fact that
     173             :         // it is a pure virtual class.
     174             :         ChannelAverageKernel<T> *chanAvgKernel_p;
     175             : };
     176             : 
     177             : //////////////////////////////////////////////////////////////////////////
     178             : // ChannelAverageKernel class
     179             : //////////////////////////////////////////////////////////////////////////
     180             : 
     181             : template<class T> class ChannelAverageKernel
     182             : {
     183             : 
     184             : public:
     185             : 
     186             :         virtual void kernel(DataCubeMap *inputData,
     187             :                                                 DataCubeMap *outputData,
     188             :                                                 casacore::uInt startInputPos,
     189             :                                                 casacore::uInt outputPos,
     190             :                                                 casacore::uInt width) = 0;
     191             : };
     192             : 
     193             : //////////////////////////////////////////////////////////////////////////
     194             : // PlainChannelAverageKernel class
     195             : //   (numerical averaging, ignoring flags)
     196             : //////////////////////////////////////////////////////////////////////////
     197             : 
     198             : template<class T> class PlainChannelAverageKernel : public ChannelAverageKernel<T>
     199             : {
     200             : 
     201             : public:
     202             : 
     203             :         void kernel(    DataCubeMap *inputData,
     204             :                                         DataCubeMap *outputData,
     205             :                                         casacore::uInt startInputPos,
     206             :                                         casacore::uInt outputPos,
     207             :                                         casacore::uInt width);
     208             : 
     209             : };
     210             : 
     211             : //////////////////////////////////////////////////////////////////////////
     212             : // FlaggedChannelAverageKernel class
     213             : //   (numerical averaging, respecting flags)
     214             : //////////////////////////////////////////////////////////////////////////
     215             : 
     216             : template<class T> class FlaggedChannelAverageKernel : public ChannelAverageKernel<T>
     217             : {
     218             : 
     219             : public:
     220             : 
     221             :         void kernel(DataCubeMap *inputData,
     222             :                                 DataCubeMap *outputData,
     223             :                                 casacore::uInt startInputPos,
     224             :                                 casacore::uInt outputPos,
     225             :                                 casacore::uInt width);
     226             : };
     227             : 
     228             : //////////////////////////////////////////////////////////////////////////
     229             : // WeightedChannelAverageKernel class
     230             : //   (weighted averaging, respecting flags)
     231             : //////////////////////////////////////////////////////////////////////////
     232             : 
     233             : template<class T> class WeightedChannelAverageKernel : public ChannelAverageKernel<T>
     234             : {
     235             : 
     236             : public:
     237             : 
     238             :         void kernel(DataCubeMap *inputData,
     239             :                                 DataCubeMap *outputData,
     240             :                                 casacore::uInt startInputPos,
     241             :                                 casacore::uInt outputPos,
     242             :                                 casacore::uInt width);
     243             : };
     244             : 
     245             : //////////////////////////////////////////////////////////////////////////
     246             : // LogicalANDKernel class
     247             : //////////////////////////////////////////////////////////////////////////
     248             : 
     249             : template<class T> class LogicalANDKernel : public ChannelAverageKernel<T>
     250             : {
     251             : 
     252             : public:
     253             : 
     254             :         void kernel(DataCubeMap *inputData,
     255             :                                 DataCubeMap *outputData,
     256             :                                 casacore::uInt startInputPos,
     257             :                                 casacore::uInt outputPos,
     258             :                                 casacore::uInt width);
     259             : };
     260             : 
     261             : //////////////////////////////////////////////////////////////////////////
     262             : // ChannelAccumulationKernel class
     263             : //   (numerical accumulation, respecting flags)
     264             : //////////////////////////////////////////////////////////////////////////
     265             : 
     266             : template<class T> class ChannelAccumulationKernel : public ChannelAverageKernel<T>
     267             : {
     268             : 
     269             : public:
     270             : 
     271             :         void kernel(DataCubeMap *inputData,
     272             :                                 DataCubeMap *outputData,
     273             :                                 casacore::uInt startInputPos,
     274             :                                 casacore::uInt outputPos,
     275             :                                 casacore::uInt width);
     276             : };
     277             : 
     278             : } //# NAMESPACE VI - END
     279             : 
     280             : } //# NAMESPACE CASA - END
     281             : 
     282             : #endif /* ChannelAverageTVI_H_ */
     283             : 

Generated by: LCOV version 1.16