Class CDMRadarAdapter

java.lang.Object
ucar.unidata.data.radar.CDMRadarAdapter
All Implemented Interfaces:
RadarAdapter, RadarConstants

public class CDMRadarAdapter extends Object implements RadarAdapter
A data adapter for Common Data Model radial data (Level II, Level III, DORADE)
Version:
$Revision: 1.54 $
Author:
IDV Development Team
  • Constructor Details

    • CDMRadarAdapter

      public CDMRadarAdapter()
      Zero-argument constructor for construction via unpersistence.
    • CDMRadarAdapter

      public CDMRadarAdapter(DataSourceImpl source, String fileName) throws VisADException
      Construct a new DORADE adapter.
      Parameters:
      source - DataSource (may be null)
      fileName - name of the DORADE file to read
      Throws:
      VisADException - problem creating data
  • Method Details

    • equals

      public boolean equals(Object o)
      Check to see if this CDMDataSource is equal to the object in question.
      Overrides:
      equals in class Object
      Parameters:
      o - object in question
      Returns:
      true if they are the same or equivalent objects
    • hashCode

      public int hashCode()
      Get the hash code for this object.
      Overrides:
      hashCode in class Object
      Returns:
      hash code.
    • getRadarStationInFile

      public EarthLocation getRadarStationInFile()
      Get the radar location from the dataset.
      Returns:
      EarthLocation.
    • toString

      public String toString()
      to String.
      Overrides:
      toString in class Object
      Returns:
      to string
    • getAngles

      protected double[] getAngles(String vname)
      Get the angles for this parameter
      Parameters:
      vname - variable name
      Returns:
      angles for that variable
    • getBaseTime

      public DateTime getBaseTime()
      Get the base time for this sweep
      Specified by:
      getBaseTime in interface RadarAdapter
      Returns:
      time of sweep
    • getVCPid

      protected short getVCPid(String vname)
      Get the parameters for this adapter
      Parameters:
      vname - variable name
      Returns:
      id for that variable
    • getVCPAngles

      protected double[] getVCPAngles(short id, double[] origAngles)
      Get the parameters for this adapter
      Parameters:
      id - vcp id number
      origAngles - The original angles
      Returns:
      dd vcp angles
    • getVCPAngle

      protected double getVCPAngle(double angle, short id)
      Find the closest angle to the given VCP angles
      Parameters:
      angle - to find
      id - of VCP
      Returns:
      ang for angle;
    • getCAPPI

      public FieldImpl getCAPPI(int moment, String varName, Real level) throws VisADException, RemoteException, IOException
      This api is based on the rsl c library from TRMM Office Radar Software Library.
      Parameters:
      moment - the moment
      varName - variable name
      level - the level
      Returns:
      capi as a FieldImpl
      Throws:
      IOException - problem reading the file
      RemoteException - problem with Java RMI
      VisADException - problem creating VisAD object
    • getData

      public DataImpl getData(DataChoice dataChoice, DataSelection subset, Hashtable requestProperties) throws VisADException, RemoteException
      Get the data for the given DataChoice and selection criteria.
      Specified by:
      getData in interface RadarAdapter
      Parameters:
      dataChoice - DataChoice for selection
      subset - subsetting criteria
      requestProperties - extra request properties
      Returns:
      the Data object for the request
      Throws:
      RemoteException - couldn't create a remote data object
      VisADException - couldn't create the data
    • clearCachedData

      public void clearCachedData()
      Clear the rds data
      Specified by:
      clearCachedData in interface RadarAdapter
    • getName

      public String getName()
      Return the name of the file
      Specified by:
      getName in interface RadarAdapter
      Returns:
      name
    • getParams

      protected RealType[] getParams()
      Get the parameters for this adapter
      Returns:
      parameters
    • getRHIOld

      public FieldImpl getRHIOld(int moment, String varName, double rhiAz) throws VisADException, RemoteException, IOException
      Makes a field of all data from one common data model radar adapter;
      Parameters:
      moment - moment
      varName - variable name
      rhiAz - azimuth for RHI
      Returns:
      rhi as a FieldImpl
      Throws:
      IOException - Problem reading data
      RemoteException - Java RMI problem
      VisADException - Couldn't create VisAD Object
    • getRadarCrossSection

      public FieldImpl getRadarCrossSection(int moment, String varName, LatLonPoint p1, LatLonPoint p2) throws VisADException, IOException
      Makes a field of all data from one common data model radar adapter;
      Parameters:
      moment - moment
      varName - variable name
      p1 - cross lint start point
      p2 - cross lint end point
      Returns:
      a FieldImpl
      Throws:
      IOException - Problem reading data
      VisADException - Couldn't create VisAD Object
    • getBearing

      public ucar.unidata.geoloc.Bearing getBearing(double lat, double lon)
      calculate the bearing of one location to the radar location
      Parameters:
      lat - input latitude
      lon - input longitude
      Returns:
      bearing
    • setCrossSectionLinePosition

      public LatLonPoint setCrossSectionLinePosition(float azi) throws VisADException, RemoteException
      setting the init crosssection line position with azimuth angle
      Parameters:
      azi - input azimuth angle
      Returns:
      lat lon point
      Throws:
      RemoteException - for bad
      VisADException - for bad
    • getIntersectionOfRayAndLine

      public float[] getIntersectionOfRayAndLine(EarthLocation radarCenter, float azi, float lat3, float lon3, float lat4, float lon4)
      calculate the intersection of ray and a line
      Parameters:
      radarCenter - earthlocation of radar
      azi - ray azimuth
      lat3 - line latitude of one end
      lon3 - line longitude of one end
      lat4 - line latitude of another end
      lon4 - _more_
      Returns:
      lat lon points
    • getIntersectionOfTwoLines

      public float[] getIntersectionOfTwoLines(float lat1, float lon1, float lat2, float lon2, float lat3, float lon3, float lat4, float lon4)
      alculate the intersection of two lines
      Parameters:
      lat1 - latitude of line 1
      lon1 - longitude of line 1
      lat2 - latitude of line 1
      lon2 - longitude of line 1
      lat3 - latitude of line 2
      lon3 - longitude of line 2
      lat4 - latitude of line 2
      lon4 - longitude of line 2
      Returns:
      lat lon float array
    • getRHI

      public FieldImpl getRHI(int moment, String varName, double rhiAz) throws VisADException, RemoteException, IOException
      Makes a field of all data from one common data model radar adapter;
      Parameters:
      moment - moment
      varName - variable name
      rhiAz - azimuth for RHI
      Returns:
      rhi as a FieldImpl
      Throws:
      IOException - Problem reading data
      RemoteException - Java RMI problem
      VisADException - Couldn't create VisAD Object
    • getStationID

      public String getStationID()
      Get the station ID
      Returns:
      the station ID
    • getStationLocation

      public EarthLocation getStationLocation()
      Get the parameters for this adapter
      Returns:
      parameters
    • setStationLocation

      public void setStationLocation(EarthLocation el) throws VisADException, RemoteException
      Set the station location
      Parameters:
      el - location of the radar
      Throws:
      VisADException - couldn't create VisAD object
      RemoteException - couldn't create remote object
    • getStationName

      public String getStationName()
      Get the parameters for this adapter
      Returns:
      parameters
    • getDataFormatName

      public String getDataFormatName()
      Get the data format name (e.g. Level II, DORADE, etc)
      Returns:
      the format name
    • getRaster

      public FlatField getRaster(int moment, String varName) throws VisADException, RemoteException, IOException, ucar.ma2.InvalidRangeException
      Create the initial spatial domain
      Parameters:
      moment - idx
      varName - variable name
      Returns:
      The initial spatial domain
      Throws:
      IOException - Problem reading data
      ucar.ma2.InvalidRangeException - Problem reading data
      RemoteException - Java RMI problem
      VisADException - problem creating domain
    • getRHISweep

      public FieldImpl getRHISweep(int moment, double azimus, String varName, int idx, boolean want3D) throws VisADException, RemoteException, IOException
      Makes a field of all data from one common data model radar adapter;
      Parameters:
      moment - moment
      azimus - azimuth angle
      varName - variable name
      idx - index
      want3D - true if should return a 3D field
      Returns:
      sweep as a FieldImpl
      Throws:
      IOException - Problem reading data
      RemoteException - Java RMI problem
      VisADException - Couldn't create VisAD Object
    • getSweep

      public FlatField getSweep(int moment, double elevation, String varName, int idx, boolean want3D) throws VisADException, RemoteException, IOException
      Makes a field of all data from one common data model radar adapter;
      Parameters:
      moment - moment
      elevation - elevation angle
      varName - variable name
      idx - _more_
      want3D - true if should return a 3D field
      Returns:
      sweep as a FieldImpl
      Throws:
      IOException - Problem reading data
      RemoteException - Java RMI problem
      VisADException - Couldn't create VisAD Object
    • getSweepNumber

      public int getSweepNumber(String vname, double angle)
      Get the sweep number for the particular variable and elevation angle
      Parameters:
      vname - variable name
      angle - elevation angle
      Returns:
      the index of the sweep in the dataset
    • getCutIdx

      public Object[] getCutIdx(ucar.nc2.dt.RadialDatasetSweep.RadialVariable sweepVar)
      get radar sweep index
      Parameters:
      sweepVar - radar variable
      Returns:
      sweep index array
    • getVolume

      public FlatField getVolume(int moment, String varName) throws VisADException, RemoteException, IOException
      Makes a field of all data from one common data model radar adapter;
      Parameters:
      moment - moment
      varName - variable name
      Returns:
      volume as a FieldImpl
      Throws:
      IOException - Problem reading data
      RemoteException - Java RMI problem
      VisADException - Couldn't create VisAD Object
    • getGridVolume

      public FieldImpl getGridVolume(int moment, String varName) throws VisADException, IOException
      Makes a field of all data from one common data model radar adapter;
      Parameters:
      moment - moment
      varName - variable name
      Returns:
      gridded volume as a FieldImpl
      Throws:
      IOException - Problem reading data
      RemoteException - Java RMI problem
      VisADException - Couldn't create VisAD Object
    • getVolumeG

      public FlatField getVolumeG(int moment, String varName) throws VisADException, IOException
      Makes a field of all data from one common data model radar adapter;
      Parameters:
      moment - moment
      varName - variable name
      Returns:
      gridded volume as a FieldImpl
      Throws:
      IOException - Problem reading data
      RemoteException - Java RMI problem
      VisADException - Couldn't create VisAD Object
    • removeNaNfromSortedArray

      public static double[] removeNaNfromSortedArray(double[] sortedArr)
      the sorted array may have some NaN at the end of the array
      Parameters:
      sortedArr - _more_
      Returns:
      sorted array with valid value
    • sortFloatArrayWithNaNAndIndices

      public static int[] sortFloatArrayWithNaNAndIndices(double[] arr)
      This is api by chatgpt to sort an array and put the NaN at its end
      Parameters:
      arr - _more_
      Returns:
      int array
    • getRHIVolume

      public FlatField getRHIVolume(int moment, String varName) throws VisADException, RemoteException, IOException
      Makes a field of all data from one common data model radar adapter;
      Parameters:
      moment - moment
      varName - variable name
      Returns:
      volume as a FieldImpl
      Throws:
      IOException - Problem reading data
      RemoteException - Java RMI problem
      VisADException - Couldn't create VisAD Object
    • getFloatNaN

      public float[] getFloatNaN(int n)
      get float array init with NaN
      Parameters:
      n - 1 D array length
      Returns:
      float array
    • isRaster

      public boolean isRaster()
      Get the parameters for this adapter
      Returns:
      parameters
    • isVolume

      public boolean isVolume()
      Get the parameters for this adapter
      Returns:
      parameters
    • isRHI

      public boolean isRHI()
      Get the parameters for this adapter
      Returns:
      parameters
    • mainDorade

      public static void mainDorade(String[] args) throws Exception
      Test main
      Parameters:
      args - cmd line args
      Throws:
      Exception - when bad things happen
    • main

      public static void main(String[] args) throws Exception
      main
      Parameters:
      args - args
      Throws:
      Exception - On badness
    • doRemove

      public void doRemove()
      Clean up whatever we need to when we are removed.
      Specified by:
      doRemove in interface RadarAdapter
    • latLon2RTheta

      public void latLon2RTheta(double lat1, double lon1, double lat2, double lon2, double[] r, double[] theta)
      latLon2RTheta calculate r and theta of two latlon points
      Parameters:
      lat1 - latitude
      lon1 - longitude
      lat2 - latitude
      lon2 - longitude
      r - radius
      theta - angle
    • fmod

      public static double fmod(double a, double b)
      fmod calculate modulus for float/double
      Parameters:
      a - any double
      b - any double
      Returns:
      fmod
    • computeGridRow

      public ucar.unidata.data.radar.CDMRadarAdapter.GridLoc[][][] computeGridRow(int numCols, int numRows, int numLevels, float[] latRows, float[] lonCols, float[] altLevels)
      computeGridRow calculate gridloc for each grid point
      Parameters:
      numCols - column
      numRows - row
      numLevels - level
      latRows - latitude
      lonCols - longitude
      altLevels - altitude
      Returns:
      grid location
    • angDist

      public static double angDist(double deltaEl, double deltaAz)
      angDist calculate sqrt of deltaEL and AZ
      Parameters:
      deltaEl - elevation diff
      deltaAz - azimuth diff
      Returns:
      angle distance
    • getWtsFor2ValidRays

      public static CDMRadarAdapter.Neighbors getWtsFor2ValidRays(ucar.unidata.data.radar.CDMRadarAdapter.GridLoc loc, CDMRadarAdapter.SearchPoint ll, CDMRadarAdapter.SearchPoint ul, CDMRadarAdapter.SearchPoint lr, CDMRadarAdapter.SearchPoint ur, double wtInner, double wtOuter)
      loadWtsFor2ValidRays calculate neighbour values
      Parameters:
      loc - grid location
      ll - point
      ul - point
      lr - point
      ur - point
      wtInner - inner weight
      wtOuter - outer weight
      Returns:
      neighbors
    • getWtsFor3Or4ValidRays

      public static CDMRadarAdapter.Neighbors getWtsFor3Or4ValidRays(ucar.unidata.data.radar.CDMRadarAdapter.GridLoc loc, CDMRadarAdapter.SearchPoint ll, CDMRadarAdapter.SearchPoint ul, CDMRadarAdapter.SearchPoint lr, CDMRadarAdapter.SearchPoint ur, double wtInner, double wtOuter)
      getWtsFor3Or4ValidRays calculate neighbour values
      Parameters:
      loc - grid location
      ll - point
      ul - point
      lr - point
      ur - point
      wtInner - neighbors
      wtOuter - neighbors
      Returns:
      neighbors
    • loadNearestGridPt

      public static double loadNearestGridPt(int igateInner, int igateOuter, CDMRadarAdapter.SearchPoint ll, CDMRadarAdapter.SearchPoint ul, CDMRadarAdapter.SearchPoint lr, CDMRadarAdapter.SearchPoint ur, CDMRadarAdapter.Neighbors wts)
      loadNearestGridPt return the nearest radial point
      Parameters:
      igateInner - gate
      igateOuter - gare
      ll - point
      ul - point
      lr - point
      ur - point
      wts - neighbors
      Returns:
      nearest point
    • calculateNearest

      public static void calculateNearest(ucar.unidata.data.radar.CDMRadarAdapter.Ray ray, int igateInner, int igateOuter, double wtInner, double wtOuter, double[] closestVal, double[] maxWt, int[] nContrib)
      Parameters:
      ray - _more_
      igateInner - _more_
      igateOuter - _more_
      wtInner - _more_
      wtOuter - _more_
      closestVal - _more_
      maxWt - _more_
      nContrib - _more_
    • loadInterpGridPt

      public static double loadInterpGridPt(int igateInner, int igateOuter, CDMRadarAdapter.SearchPoint ll, CDMRadarAdapter.SearchPoint ul, CDMRadarAdapter.SearchPoint lr, CDMRadarAdapter.SearchPoint ur, CDMRadarAdapter.Neighbors wts)
      Parameters:
      igateInner - _more_
      igateOuter - _more_
      ll - _more_
      ul - _more_
      lr - _more_
      ur - _more_
      wts - _more_
      Returns:
      interporated val loadInterpGridPt calculate each grid point value with 8 nearby radial point and return the interporated value
    • calAccumInterp

      public static void calAccumInterp(ucar.unidata.data.radar.CDMRadarAdapter.Ray ray, int igateInner, int igateOuter, double wtInner, double wtOuter, double[] sumVals, double[] sumWts, int[] nContrib)
      Parameters:
      ray - _more_
      igateInner - _more_
      igateOuter - _more_
      wtInner - _more_
      wtOuter - _more_
      sumVals - _more_
      sumWts - _more_
      nContrib - _more_ calAccumInterp return the interporate grid point value with the nearby radial points on the same ray
    • interpGridRow

      public static double[] interpGridRow(int iz, int iy, ucar.unidata.data.radar.CDMRadarAdapter.GridLoc[][][] loc, ucar.unidata.data.radar.CDMRadarAdapter.Ray[][] rays, double[] elevs, double[][] azims, int[][] azidx)
      Parameters:
      iz - _more_
      iy - _more_
      loc - _more_
      rays - _more_
      elevs - _more_
      azims - _more_
      azidx - _more_
      Returns:
      interprow interpRow return each row data For each grid point use radial coordinate information in the gridloc to find the neighbour rays, calculate the neighbour values, and finally calculate the value of the grid point.
    • getNeighborRays

      public static int[][] getNeighborRays(double az, double elev, double[] elevs, double[][] azims, int[][] azidx)
      Parameters:
      az - _more_
      elev - _more_
      elevs - _more_
      azims - _more_
      azidx - _more_
      azims - is sorted azimuths with original idex in azidx
      Returns:
      rays this is API for finding the neighboring's ray of given az and elev the returns of the ray index of ll = 0, lr = 1, ul = 2, ur = 3
    • findInsertIndex

      public static int findInsertIndex(double[] sortedArray, double value)
      Parameters:
      sortedArray - _more_
      value - _more_
      Returns:
      idx index findInsertIndex return the inserting index this is used for the azimuth arrays