package ucar.nc2.dataset; import org.junit.Assert; import org.junit.Test; import org.junit.experimental.categories.Category; import ucar.nc2.constants.FeatureType; import ucar.nc2.dt.RadialDatasetSweep; import ucar.nc2.ft.FeatureDatasetFactoryManager; import ucar.nc2.time.CalendarDate; import ucar.unidata.util.test.category.NeedsCdmUnitTest; import ucar.unidata.util.test.TestDir; import java.io.IOException; import java.util.Formatter; /** * Created by rmay on 3/7/14. */ @Category(NeedsCdmUnitTest.class) public class TestCFRadial { private RadialDatasetSweep testData() throws IOException { String filename = TestDir.cdmUnitTestDir + "conventions/cfradial/cfrad.20080604_002217_000_SPOL_v36_SUR.nc"; Formatter buf = new Formatter(); return (RadialDatasetSweep) FeatureDatasetFactoryManager.open( FeatureType.RADIAL, filename, null, buf); } private RadialDatasetSweep oneDData() throws IOException { String filename = TestDir.cdmUnitTestDir + "conventions/cfradial/cfrad.20140608_220305.809_to_20140608_220710.630_KFTG_v348_Surveillance_SUR.nc"; Formatter buf = new Formatter(); return (RadialDatasetSweep) FeatureDatasetFactoryManager.open( FeatureType.RADIAL, filename, null, buf); } private RadialDatasetSweep rhiData() throws IOException { String filename = TestDir.cdmUnitTestDir + "conventions/cfradial/cfrad.20140717_003008.286_to_20140717_003049.699_SPOL_v140_rhi_sim_RHI.nc"; Formatter buf = new Formatter(); return (RadialDatasetSweep) FeatureDatasetFactoryManager.open( FeatureType.RADIAL, filename, null, buf); } @Test public void testBasic() throws IOException { try (RadialDatasetSweep ds = testData()) { Assert.assertEquals(FeatureType.RADIAL, ds.getFeatureType()); Assert.assertEquals("CF/RadialNetCDF", ds.getDataFormat()); Assert.assertTrue(ds.isVolume()); Assert.assertEquals(2, ds.getDataVariables().size()); Assert.assertNotNull(ds.getDataVariable("DBZ")); Assert.assertNotNull(ds.getDataVariable("VR")); } } @Test public void testSite() throws IOException { try (RadialDatasetSweep ds = testData()) { Assert.assertTrue(ds.isStationary()); Assert.assertEquals("SPOLRVP8", ds.getRadarName()); Assert.assertEquals("XXXX", ds.getRadarID()); } } @Test public void testDates() throws IOException { try (RadialDatasetSweep ds = testData()) { CalendarDate trueStart = CalendarDate.of(null, 2008, 6, 4, 0, 15, 3); Assert.assertEquals(trueStart, ds.getCalendarDateStart()); CalendarDate trueEnd = CalendarDate.of(null, 2008, 6, 4, 0, 22, 17); Assert.assertEquals(trueEnd, ds.getCalendarDateEnd()); } } @Test public void testSweeps() throws IOException { try (RadialDatasetSweep ds = testData()) { RadialDatasetSweep.RadialVariable var = (RadialDatasetSweep.RadialVariable) ds.getDataVariable("DBZ"); Assert.assertEquals(9, var.getNumSweeps()); Assert.assertEquals(22.526699, var.getSweep(0).getOrigin(0).getLatitude(), 1e-6); Assert.assertEquals(120.43350219726, var.getSweep(0).getOrigin(0).getLongitude(), 1e-6); Assert.assertEquals(45, var.getSweep(0).getOrigin(0).getAltitude(), 1e-5); Assert.assertEquals(0.379, var.getSweep(0).getElevation(0), 1e-6); final int firstRads = 483; Assert.assertEquals(firstRads, var.getSweep(0).getRadialNumber()); Assert.assertEquals(0.5109, var.getSweep(0).getElevation(firstRads - 1), 1e-6); Assert.assertEquals(0.9998, var.getSweep(1).getElevation(1), 1e-6); } } @Test public void testOneD() throws IOException { try (RadialDatasetSweep ds = oneDData()) { Assert.assertEquals(FeatureType.RADIAL, ds.getFeatureType()); RadialDatasetSweep.RadialVariable var = (RadialDatasetSweep.RadialVariable) ds.getDataVariable("REF"); Assert.assertEquals(14, var.getNumSweeps()); // Check getting all data -- where data are padded float[] data = var.readAllData(); Assert.assertEquals(9233280, data.length); Assert.assertEquals(18.5, data[4616640], 1e-6); Assert.assertTrue(Float.isNaN(data[4617412])); // Check getting sweep data = var.getSweep(6).readData(); Assert.assertEquals(335520, data.length); Assert.assertEquals(10.5, data[0], 1e-6); // Check random portion of data from a sweep and ray data = var.getSweep(2).readData(3); Assert.assertEquals(1468, data.length); Assert.assertEquals(-4.5, data[100], 1e-6); Assert.assertEquals(9.0, data[101], 1e-6); Assert.assertEquals(1.5, data[102], 1e-6); } } @Test // Tests getting RHI data with variable number of gates in sweep public void testRHI() throws IOException { try (RadialDatasetSweep ds = rhiData()) { Assert.assertEquals(FeatureType.RADIAL, ds.getFeatureType()); RadialDatasetSweep.RadialVariable var = (RadialDatasetSweep.RadialVariable) ds.getDataVariable("DBZ"); Assert.assertEquals(4, var.getNumSweeps()); // Check getting all data float[] data = var.readAllData(); Assert.assertEquals(561180, data.length); Assert.assertEquals(18.92, data[142285], 1e-2); Assert.assertEquals(32.03, data[142286], 1e-2); // Check getting sweep data = var.getSweep(3).readData(); Assert.assertEquals(140295, data.length); // Need to check data in padded, missing portion Assert.assertEquals(18.80, data[0], 1e-2); Assert.assertTrue(Float.isNaN(data[254])); Assert.assertEquals(18.82, data[995], 1e-2); // Check random portion of data from a sweep and ray data = var.getSweep(2).readData(3); Assert.assertEquals(995, data.length); Assert.assertEquals(58.59, data[100], 1e-2); Assert.assertEquals(64.97, data[101], 1e-2); Assert.assertEquals(55.98, data[102], 1e-2); data = var.getSweep(2).readData(50); Assert.assertEquals(673, data.length); Assert.assertEquals(5.99, data[100], 1e-2); } } }