def test_numpy_data_2d(self): DIM = 2 testdata = np.arange(20 * 21).reshape(20, 21) error = 1. * np.ones(testdata.shape) source = NumpyData(DataSource.GRAVITY, testdata, null_value=NUMPY_NULL) X0, NP, DX = source.getDataExtents() for i in range(DIM): self.assertAlmostEqual(X0[i], 0., msg="Data origin wrong") self.assertEqual(NP[i], testdata.shape[DIM - i - 1], msg="Wrong number of data points") self.assertAlmostEqual(DX[i], 1000. / testdata.shape[DIM - i - 1], msg="Wrong cell size") domainbuilder = DomainBuilder(dim=3) domainbuilder.addSource(source) domainbuilder.setVerticalExtents(depth=-VMIN, air_layer=VMAX, num_cells=NE_V) domainbuilder.setElementPadding(PAD_X, PAD_Y) dom = domainbuilder.getDomain() g, s = domainbuilder.getGravitySurveys()[0] outfn = os.path.join(WORKDIR, '_npdata2d.csv') saveDataCSV(outfn, g=g, s=s) DV = (VMAX - VMIN) / NE_V # check data nx = NP[0] + 2 * PAD_X ny = NP[1] + 2 * PAD_Y nz = NE_V z_data = int(np.round((ALT - VMIN) / DV) - 1) out = np.genfromtxt(outfn, delimiter=',', skip_header=1, dtype=np.float64) # recompute nz since ripley might have adjusted number of elements nz = len(out) // (nx * ny) g_out = out[:, 0].reshape(nz, ny, nx) s_out = out[:, 1].reshape(nz, ny, nx) self.assertAlmostEqual( np.abs(g_out[z_data, PAD_Y:PAD_Y + NP[1], PAD_X:PAD_X + NP[0]] - testdata).max(), 0., msg="Difference in gravity data area") self.assertAlmostEqual( np.abs(s_out[z_data, PAD_Y:PAD_Y + NP[1], PAD_X:PAD_X + NP[0]] - error).max(), 0., msg="Difference in error data area") # overwrite data -> should only be padding value left g_out[z_data, PAD_Y:PAD_Y + NP[1], PAD_X:PAD_X + NP[0]] = NUMPY_NULL self.assertAlmostEqual(np.abs(g_out - NUMPY_NULL).max(), 0., msg="Wrong values in padding area")
def test_cdf_with_padding(self): source = NetCdfData(DataSource.GRAVITY, NC_DATA, ALT, scale_factor=1e-6) domainbuilder=DomainBuilder() domainbuilder.addSource(source) domainbuilder.setVerticalExtents(depth=-VMIN, air_layer=VMAX, num_cells=NE_V) domainbuilder.setElementPadding(PAD_X,PAD_Y) dom=domainbuilder.getDomain() g,s=domainbuilder.getGravitySurveys()[0] outfn=os.path.join(WORKDIR, '_ncdata.csv') saveDataCSV(outfn, g=g, s=s) X0,NP,DX=source.getDataExtents() DV=(VMAX-VMIN)/NE_V # check metadata self.assertEqual(NP, NC_SIZE, msg="Wrong number of data points") # this only works if gdal is available try: import osgeo.osr for i in range(len(NC_ORIGIN)): self.assertAlmostEqual(X0[i], NC_ORIGIN[i], msg="Data origin wrong") except ImportError: print("Skipping test of data origin since gdal is not installed.") # check data nx=NP[0]+2*PAD_X ny=NP[1]+2*PAD_Y nz=NE_V z_data=int(np.round((ALT-VMIN)/DV)-1) ref=np.genfromtxt(NC_REF, delimiter=',', dtype=np.float64) g_ref=ref[:,0].reshape((NP[1],NP[0])) s_ref=ref[:,1].reshape((NP[1],NP[0])) out=np.genfromtxt(outfn, delimiter=',', skip_header=1, dtype=np.float64) # recompute nz since ripley might have adjusted number of elements nz=len(out)//(nx*ny) g_out=out[:,0].reshape(nz,ny,nx) s_out=out[:,1].reshape(nz,ny,nx) self.assertAlmostEqual(np.abs( g_out[z_data, PAD_Y:PAD_Y+NP[1], PAD_X:PAD_X+NP[0]]-g_ref).max(), 0., msg="Difference in gravity data area") self.assertAlmostEqual(np.abs( s_out[z_data, PAD_Y:PAD_Y+NP[1], PAD_X:PAD_X+NP[0]]-s_ref).max(), 0., msg="Difference in error data area") # overwrite data -> should only be padding value left g_out[z_data, PAD_Y:PAD_Y+NP[1], PAD_X:PAD_X+NP[0]]=NC_NULL self.assertAlmostEqual(np.abs(g_out-NC_NULL).max(), 0., msg="Wrong values in padding area")
def test_numpy_data_2d(self): DIM=2 testdata = np.arange(20*21).reshape(20,21) error = 1.*np.ones(testdata.shape) source = NumpyData(DataSource.GRAVITY, testdata, null_value=NUMPY_NULL) X0,NP,DX=source.getDataExtents() for i in range(DIM): self.assertAlmostEqual(X0[i], 0., msg="Data origin wrong") self.assertEqual(NP[i], testdata.shape[DIM-i-1], msg="Wrong number of data points") self.assertAlmostEqual(DX[i], 1000./testdata.shape[DIM-i-1], msg="Wrong cell size") domainbuilder=DomainBuilder(dim=3) domainbuilder.addSource(source) domainbuilder.setVerticalExtents(depth=-VMIN, air_layer=VMAX, num_cells=NE_V) domainbuilder.setElementPadding(PAD_X, PAD_Y) dom=domainbuilder.getDomain() g,s=domainbuilder.getGravitySurveys()[0] outfn=os.path.join(WORKDIR, '_npdata2d.csv') saveDataCSV(outfn, g=g, s=s) DV=(VMAX-VMIN)/NE_V # check data nx=NP[0]+2*PAD_X ny=NP[1]+2*PAD_Y nz=NE_V z_data=int(np.round((ALT-VMIN)/DV)-1) out=np.genfromtxt(outfn, delimiter=',', skip_header=1, dtype=np.float64) # recompute nz since ripley might have adjusted number of elements nz=len(out)//(nx*ny) g_out=out[:,0].reshape(nz,ny,nx) s_out=out[:,1].reshape(nz,ny,nx) self.assertAlmostEqual(np.abs( g_out[z_data, PAD_Y:PAD_Y+NP[1], PAD_X:PAD_X+NP[0]]-testdata).max(), 0., msg="Difference in gravity data area") self.assertAlmostEqual(np.abs( s_out[z_data, PAD_Y:PAD_Y+NP[1], PAD_X:PAD_X+NP[0]]-error).max(), 0., msg="Difference in error data area") # overwrite data -> should only be padding value left g_out[z_data, PAD_Y:PAD_Y+NP[1], PAD_X:PAD_X+NP[0]]=NUMPY_NULL self.assertAlmostEqual(np.abs(g_out-NUMPY_NULL).max(), 0., msg="Wrong values in padding area")
def test_cdf_with_padding_ellipsoid(self): ref = WGS84ReferenceSystem() source = NetCdfData(DataSource.GRAVITY, NC_DATA, ALT, reference_system=ref, scale_factor=1e-6) domainbuilder = DomainBuilder(reference_system=ref) domainbuilder.addSource(source) domainbuilder.setVerticalExtents(depth=-VMIN, air_layer=VMAX, num_cells=NE_V) domainbuilder.setElementPadding(PAD_X, PAD_Y) dom = domainbuilder.getDomain() g, s = domainbuilder.getGravitySurveys()[0] outfn = os.path.join(WORKDIR, '_ncdata.csv') saveDataCSV(outfn, g=g, s=s) X0, NP, DX = source.getDataExtents() DV = (VMAX - VMIN) / NE_V # check metadata self.assertEqual(NP, NC_SIZE, msg="Wrong number of data points") for i in range(len(NC_ORIGIN)): self.assertAlmostEqual(X0[i], NC_ORIGIN_WGS84[i], msg="Data origin wrong") # check data nx = NP[0] + 2 * PAD_X ny = NP[1] + 2 * PAD_Y nz = NE_V z_data = int(np.round((ALT - VMIN) / DV) - 1) ref = np.genfromtxt(NC_REF, delimiter=',', dtype=np.float64) g_ref = ref[:, 0].reshape((NP[1], NP[0])) s_ref = ref[:, 1].reshape((NP[1], NP[0])) out = np.genfromtxt(outfn, delimiter=',', skip_header=1, dtype=np.float64) # recompute nz since ripley might have adjusted number of elements nz = len(out) // (nx * ny) g_out = out[:, 0].reshape(nz, ny, nx) s_out = out[:, 1].reshape(nz, ny, nx) self.assertAlmostEqual( np.abs(g_out[z_data, PAD_Y:PAD_Y + NP[1], PAD_X:PAD_X + NP[0]] - g_ref).max(), 0., msg="Difference in gravity data area") self.assertAlmostEqual( np.abs(s_out[z_data, PAD_Y:PAD_Y + NP[1], PAD_X:PAD_X + NP[0]] - s_ref).max(), 0., msg="Difference in error data area") # overwrite data -> should only be padding value left g_out[z_data, PAD_Y:PAD_Y + NP[1], PAD_X:PAD_X + NP[0]] = NC_NULL self.assertAlmostEqual(np.abs(g_out - NC_NULL).max(), 0., msg="Wrong values in padding area")
def _ers_tester(self, filename): source = ErMapperData(DataSource.GRAVITY, headerfile=filename, altitude=ALT, scale_factor=1e-6) domainbuilder = DomainBuilder() domainbuilder.addSource(source) domainbuilder.setVerticalExtents(depth=-VMIN, air_layer=VMAX, num_cells=NE_V) domainbuilder.setElementPadding(PAD_X, PAD_Y) dom = domainbuilder.getDomain() g, s = domainbuilder.getGravitySurveys()[0] outfn = os.path.join(WORKDIR, '_ersdata.csv') saveDataCSV(outfn, g=g, s=s) X0, NP, DX = source.getDataExtents() DV = (VMAX - VMIN) / NE_V # check metadata self.assertEqual(NP, ERS_SIZE, msg="Wrong number of data points") # this test only works if gdal is available try: import osgeo.osr for i in range(len(ERS_ORIGIN)): self.assertAlmostEqual(X0[i], ERS_ORIGIN[i], msg="Data origin wrong") except ImportError: print("Skipping test of data origin since gdal is not installed.") # check data nx = NP[0] + 2 * PAD_X ny = NP[1] + 2 * PAD_Y nz = NE_V z_data = int(np.round((ALT - VMIN) / DV) - 1) ref = np.genfromtxt(ERS_REF, delimiter=',', dtype=np.float64) g_ref = ref[:, 0].reshape((NP[1], NP[0])) s_ref = ref[:, 1].reshape((NP[1], NP[0])) out = np.genfromtxt(outfn, delimiter=',', skip_header=1, dtype=np.float64) # recompute nz since ripley might have adjusted number of elements nz = len(out) // (nx * ny) g_out = out[:, 0].reshape(nz, ny, nx) s_out = out[:, 1].reshape(nz, ny, nx) self.assertAlmostEqual( np.abs(g_out[z_data, PAD_Y:PAD_Y + NP[1], PAD_X:PAD_X + NP[0]] - g_ref).max(), 0., msg="Difference in gravity data area") self.assertAlmostEqual( np.abs(s_out[z_data, PAD_Y:PAD_Y + NP[1], PAD_X:PAD_X + NP[0]] - s_ref).max(), 0., msg="Difference in error data area") # overwrite data -> should only be padding value left g_out[z_data, PAD_Y:PAD_Y + NP[1], PAD_X:PAD_X + NP[0]] = ERS_NULL self.assertAlmostEqual(np.abs(g_out - ERS_NULL).max(), 0., msg="Wrong values in padding area")