def test_adcp_earth(self): """ Tests magnetic_correction function for ADCPs set to output data in the Earth Coordinate system. Values were not defined in DPS, were recreated using test values above: OOI (2012). Data Product Specification for Velocity Profile and Echo Intensity. Document Control Number 1341-00750. https://alfresco.oceanobservatories.org/ (See: Company Home >> OOI >> Controlled >> 1000 System Level >> 1341-00750_Data_Product_SPEC_VELPROF_OOI.pdf) Implemented by Christopher Wingard, 2014-02-06 """ # set the test data u, v, w, e = af.adcp_beam2ins(self.b1, self.b2, self.b3, self.b4) ### old adcp_ins2earth returned 3 variables uu, vv, ww = af.adcp_ins2earth(u, v, w, self.heading / 100., self.pitch / 100., self.roll / 100., self.orient) # test the magnetic variation correction got_uu_cor = af.adcp_earth_eastward(uu, vv, self.depth, self.lat, self.lon, self.ntp) got_vv_cor = af.adcp_earth_northward(uu, vv, self.depth, self.lat, self.lon, self.ntp) np.testing.assert_array_almost_equal(got_uu_cor, np.atleast_2d(self.uu_cor), 4) np.testing.assert_array_almost_equal(got_vv_cor, np.atleast_2d(self.vv_cor), 4) # reset the test inputs for multiple records uu = np.tile(uu, (24, 1)) vv = np.tile(vv, (24, 1)) depth = np.ones(24) * self.depth lat = np.ones(24) * self.lat lon = np.ones(24) * self.lon ntp = np.ones(24) * self.ntp # reset expected results for multiple records uu_cor = np.tile(self.uu_cor, (24, 1)) vv_cor = np.tile(self.vv_cor, (24, 1)) # compute the results for multiple records got_uu_cor = af.adcp_earth_eastward(uu, vv, depth, lat, lon, ntp) got_vv_cor = af.adcp_earth_northward(uu, vv, depth, lat, lon, ntp) # test the magnetic variation correction np.testing.assert_array_almost_equal(got_uu_cor, uu_cor, 4) np.testing.assert_array_almost_equal(got_vv_cor, vv_cor, 4)
def test_adcp_beam2earth(self): """ Test adcp_beam2ins and adcp_ins2earth functions. Values based on those defined in DPS: OOI (2012). Data Product Specification for Velocity Profile and Echo Intensity. Document Control Number 1341-00750. https://alfresco.oceanobservatories.org/ (See: Company Home >> OOI >> Controlled >> 1000 System Level >> 1341-00750_Data_Product_SPEC_VELPROF_OOI.pdf) Implemented by Christopher Wingard, April 2013 """ # set test inputs b1 = np.array([-0.0300, -0.2950, -0.5140, -0.2340, -0.1880, 0.2030, -0.3250, 0.3050]) b2 = np.array([ 0.1800, -0.1320, 0.2130, 0.3090, 0.2910, 0.0490, 0.1880, 0.3730]) b3 = np.array([-0.3980, -0.4360, -0.1310, -0.4730, -0.4430, 0.1880, -0.1680, 0.2910]) b4 = np.array([-0.2160, -0.6050, -0.0920, -0.0580, 0.4840, -0.0050, 0.3380, 0.1750]) heading = 98.4100 pitch = 0.6900 roll = -2.5400 orient = 1 # compute beam to instrument transform u, v, w, e = adcpfunc.adcp_beam2ins(b1, b2, b3, b4) # compute instrument to Earth transform got_uu, got_vv, got_ww = adcpfunc.adcp_ins2earth(u, v, w, heading, pitch, roll, orient) # set expected results uu = np.array([ 0.2175, -0.2814, -0.1002, 0.4831, 1.2380, -0.2455, 0.6218, -0.1807]) vv = np.array([-0.3367, -0.1815, -1.0522, -0.8676, -0.8919, 0.2585, -0.8497, -0.0873]) ww = np.array([ 0.1401, 0.3977, 0.1870, 0.1637, 0.0091, -0.1290, 0.0334, -0.3017]) # test the transform self.assertTrue(np.allclose(got_uu, uu, rtol=1e4, atol=0)) self.assertTrue(np.allclose(got_vv, vv, rtol=1e4, atol=0)) self.assertTrue(np.allclose(got_ww, ww, rtol=1e4, atol=0))
def test_vadcp_beam(self): """ Tests vadcp_beam_eastward, vadcp_beam_northward, vadcp_beam_vertical_est and vadcp_beam_vertical_true functions (which call adcp_beam2ins and adcp_ins2earth) for the specialized 5-beam ADCP. Application of the magnetic correction and conversion from mm/s to m/s is not applied. Values based on those defined in DPS: OOI (2012). Data Product Specification for Turbulent Velocity Profile and Echo Intensity. Document Control Number 1341-00760. https://alfresco.oceanobservatories.org/ (See: Company Home >> OOI >> Controlled >> 1000 System Level >> 1341-00760_Data_Product_SPEC_VELTURB_OOI.pdf) Implemented by: 2014-07-24: Christopher Wingard. Initial code. """ # test inputs b1 = np.ones((10, 10)) * -325 b2 = np.ones((10, 10)) * 188 b3 = np.ones((10, 10)) * 168 b4 = np.ones((10, 10)) * -338 b5 = np.ones((10, 10)) * -70 heading = np.array([30, 30, 30, 30, 30, 32, 32, 32, 32, 32]) pitch = np.array([0, 2, 3, 3, 1, 2, 2, 3, 3, 1]) roll = np.array([0, 4, 3, 4, 3, 3, 4, 3, 4, 3]) orient = np.ones(10) # expected outputs vle = np.array([279.6195, 282.6881, 281.8311, 282.7147, 282.1188, 246.2155, 246.9874, 246.1226, 247.0156, 246.4276]).reshape(-1, 1) vle = np.reshape(np.tile(vle, 10), (10, 10)) vln = np.array([-1015.5964, -1018.0226, -1018.2595, -1017.9765, -1017.7612, -1027.3264, -1027.2681, -1027.4749, -1027.2230, -1026.9870]).reshape(-1, 1) vln = np.reshape(np.tile(vln, 10), (10, 10)) vlu = np.array([81.6756, 3.3916, 3.5950, -9.4974, 29.4154, 16.5077, 3.3916, 3.5950, -9.4974, 29.4154]).reshape(-1, 1) vlu = np.reshape(np.tile(vlu, 10), (10, 10)) evl = np.array([34.1128, 34.1128, 34.1128, 34.1128, 34.1128, 34.1128, 34.1128, 34.1128, 34.1128, 34.1128]).reshape(-1, 1) evl = np.reshape(np.tile(evl, 10), (10, 10)) w5 = np.array([70.0000, -8.2485, -8.0487, -21.1287, 17.7575, 4.8552, -8.2485, -8.0487, -21.1287, 17.7575]).reshape(-1, 1) w5 = np.reshape(np.tile(w5, 10), (10, 10)) # test the transformations u, v, w_est, e = af.adcp_beam2ins(b1, b2, b3, b4) uu, vv, ww_est = af.adcp_ins2earth(u, v, w_est, heading, pitch, roll, orient) _, _, ww_true = af.adcp_ins2earth(u, v, b5, heading, pitch, roll, orient) # compare the results np.testing.assert_array_almost_equal(uu, vle, 4) np.testing.assert_array_almost_equal(vv, vln, 4) np.testing.assert_array_almost_equal(ww_est, vlu, 4) np.testing.assert_array_almost_equal(e, evl, 4) np.testing.assert_array_almost_equal(ww_true, w5, 4)