LCOV - code coverage report
Current view: top level - frmts/rcm - rcmdataset.h (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 2 2 100.0 %
Date: 2024-11-21 22:18:42 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Project:  DRDC Ottawa GEOINT
       4             :  * Purpose:  Radarsat Constellation Mission - XML Products (product.xml) driver
       5             :  * Author:   Roberto Caron, MDA
       6             :  *           on behalf of DRDC Ottawa
       7             :  *
       8             :  ******************************************************************************
       9             :  * Copyright (c) 2020, DRDC Ottawa
      10             :  *
      11             :  * Based on the RS2 Dataset Class
      12             :  *
      13             :  * SPDX-License-Identifier: MIT
      14             :  ****************************************************************************/
      15             : 
      16             : #ifndef GDAL_RCM_H_INCLUDED
      17             : #define GDAL_RCM_H_INCLUDED
      18             : 
      19             : #include "gdal_pam.h"
      20             : 
      21             : typedef enum eCalibration_t
      22             : {
      23             :     Sigma0 = 0,
      24             :     Gamma,
      25             :     Beta0,
      26             :     Uncalib,
      27             :     None
      28             : } eCalibration;
      29             : 
      30             : /************************************************************************/
      31             : /* ==================================================================== */
      32             : /*                               RCMDataset                             */
      33             : /* ==================================================================== */
      34             : /************************************************************************/
      35             : 
      36             : class RCMDataset final : public GDALPamDataset
      37             : {
      38             :     CPLXMLTreeCloser psProduct{nullptr};
      39             : 
      40             :     int nGCPCount = 0;
      41             :     GDAL_GCP *pasGCPList = nullptr;
      42             :     OGRSpatialReference m_oSRS{};
      43             :     OGRSpatialReference m_oGCPSRS{};
      44             :     char **papszSubDatasets = nullptr;
      45             :     double adfGeoTransform[6];
      46             :     bool bHaveGeoTransform = false;
      47             :     bool bPerPolarizationScaling = false;
      48             :     bool isComplexData = false;
      49             :     int magnitudeBits = 16;
      50             :     int realBitsComplexData = 32;
      51             :     int imaginaryBitsComplexData = 32;
      52             :     char **papszExtraFiles = nullptr;
      53             :     double *m_nfIncidenceAngleTable = nullptr;
      54             :     int m_IncidenceAngleTableSize = 0;
      55             : 
      56             :     CPL_DISALLOW_COPY_ASSIGN(RCMDataset)
      57             : 
      58             :   protected:
      59             :     virtual int CloseDependentDatasets() override;
      60             : 
      61             :   public:
      62             :     RCMDataset();
      63             :     virtual ~RCMDataset();
      64             : 
      65             :     virtual int GetGCPCount() override;
      66             : 
      67             :     const OGRSpatialReference *GetGCPSpatialRef() const override;
      68             :     virtual const GDAL_GCP *GetGCPs() override;
      69             : 
      70             :     const OGRSpatialReference *GetSpatialRef() const override;
      71             :     virtual CPLErr GetGeoTransform(double *) override;
      72             : 
      73             :     virtual char **GetMetadataDomainList() override;
      74             :     virtual char **GetMetadata(const char *pszDomain = "") override;
      75             :     virtual char **GetFileList(void) override;
      76             : 
      77             :     static GDALDataset *Open(GDALOpenInfo *);
      78             : 
      79             :     CPLXMLNode *GetProduct()
      80             :     {
      81             :         return psProduct.get();
      82             :     }
      83             : 
      84             :     /* If False, this is Magnitude,   True, Complex data with Real and
      85             :      * Imaginary*/
      86          13 :     bool IsComplexData()
      87             :     {
      88          13 :         return isComplexData;
      89             :     }
      90             : 
      91             :     /* These 2 variables are used in case of Complex Data */
      92             :     int GetRealBitsComplexData()
      93             :     {
      94             :         return realBitsComplexData;
      95             :     }
      96             : 
      97             :     int GetImaginaryBitsComplexData()
      98             :     {
      99             :         return imaginaryBitsComplexData;
     100             :     }
     101             : 
     102             :     /* This variable is used in case of Magnitude */
     103             :     int GetMagnitudeBits()
     104             :     {
     105             :         return magnitudeBits;
     106             :     }
     107             : 
     108             :     /* This variable is used to hold the Incidence Angle */
     109             :     double *GetIncidenceAngle()
     110             :     {
     111             :         return m_nfIncidenceAngleTable;
     112             :     }
     113             : 
     114             :     /* This variable is used to hold the Incidence Angle Table Size */
     115             :     int GetIncidenceAngleSize()
     116             :     {
     117             :         return m_IncidenceAngleTableSize;
     118             :     }
     119             : };
     120             : 
     121             : /************************************************************************/
     122             : /* ==================================================================== */
     123             : /*                          RCMRasterBand                               */
     124             : /* ==================================================================== */
     125             : /************************************************************************/
     126             : 
     127             : class RCMRasterBand final : public GDALPamRasterBand
     128             : {
     129             :   private:
     130             :     eCalibration m_eCalib = eCalibration::Uncalib;
     131             :     GDALDataset *poBandFile = nullptr;
     132             :     RCMDataset *poRCMDataset = nullptr;
     133             :     GDALDataset *m_poBandDataset = nullptr;
     134             : 
     135             :     double *m_nfTable = nullptr;
     136             :     int m_nTableSize = 0;
     137             :     double m_nfOffset = 0;
     138             :     char *m_pszLUTFile = nullptr;
     139             :     int pixelFirstLutValue = 0;
     140             :     int stepSize = 0;
     141             :     int numberOfValues = 0;
     142             :     GDALRasterBand *poBand = nullptr;
     143             : 
     144             :     // 2 bands representing I+Q -> one complex band
     145             :     // otherwise poBandFile is passed straight through
     146             :     bool twoBandComplex = false;
     147             : 
     148             :     bool isOneFilePerPol = false;
     149             :     bool isNITF = false;
     150             : 
     151             :     CPL_DISALLOW_COPY_ASSIGN(RCMRasterBand)
     152             : 
     153             :   public:
     154             :     RCMRasterBand(RCMDataset *poDSIn, int nBandIn, GDALDataType eDataTypeIn,
     155             :                   const char *pszPole, GDALDataset *poBandFile,
     156             :                   bool bTwoBandComplex, bool isOneFilePerPol, bool isNITF);
     157             : 
     158             :     virtual ~RCMRasterBand();
     159             : 
     160             :     virtual CPLErr IReadBlock(int, int, void *) override;
     161             : 
     162             :     static GDALDataset *Open(GDALOpenInfo *);
     163             : };
     164             : 
     165             : /************************************************************************/
     166             : /* ==================================================================== */
     167             : /*                         RCMCalibRasterBand                           */
     168             : /* ==================================================================== */
     169             : /************************************************************************/
     170             : /* Returns data that has been calibrated to sigma nought, gamma         */
     171             : /* or beta nought.                                                      */
     172             : /************************************************************************/
     173             : 
     174             : class RCMCalibRasterBand final : public GDALPamRasterBand
     175             : {
     176             :   private:
     177             :     eCalibration m_eCalib = eCalibration::Uncalib;
     178             :     GDALDataset *m_poBandDataset = nullptr;
     179             :     /* data type that used to be before transformation */
     180             :     GDALDataType m_eOriginalType = GDT_Unknown;
     181             : 
     182             :     double *m_nfTable = nullptr;
     183             :     int m_nTableSize = 0;
     184             :     double m_nfOffset = 0;
     185             :     char *m_pszLUTFile = nullptr;
     186             :     int pixelFirstLutValue = 0;
     187             :     int stepSize = 0;
     188             :     int numberOfValues = 0;
     189             : 
     190             :     char *m_pszNoiseLevelsFile = nullptr;
     191             :     double *m_nfTableNoiseLevels = nullptr;
     192             :     int pixelFirstLutValueNoiseLevels = 0;
     193             :     int stepSizeNoiseLevels = 0;
     194             :     int numberOfValuesNoiseLevels = 0;
     195             :     int m_nTableNoiseLevelsSize = 0;
     196             : 
     197             :     void ReadLUT();
     198             :     void ReadNoiseLevels();
     199             : 
     200             :     CPL_DISALLOW_COPY_ASSIGN(RCMCalibRasterBand)
     201             : 
     202             :   public:
     203             :     RCMCalibRasterBand(RCMDataset *poDataset, const char *pszPolarization,
     204             :                        GDALDataType eType, GDALDataset *poBandDataset,
     205             :                        eCalibration eCalib, const char *pszLUT,
     206             :                        const char *pszNoiseLevels, GDALDataType eOriginalType);
     207             :     ~RCMCalibRasterBand();
     208             : 
     209             :     CPLErr IReadBlock(int nBlockXOff, int nBlockYOff, void *pImage) override;
     210             : };
     211             : 
     212             : #endif /* ndef GDAL_RCM_H_INCLUDED */

Generated by: LCOV version 1.14