예제 #1
0
    def set_ens(self, ens: Ensemble):
        """
        Get the data out of the ensemble and populate
        the structure.

        Lock and unlock when getting the data to ensure
        when new data is received, it is not being used with
        old data.
        :param ens: Latest ensemble.
        :return:
        """
        # Lock the object
        self.thread_lock.acquire()

        if ens.IsEnsembleData:
            self.x_dt.append(ens.EnsembleData.datetime().isoformat())
        else:
            self.x_dt.append(None)

        if ens.IsAncillaryData:
            self.heading.append(ens.AncillaryData.Heading)
            self.pitch.append(ens.AncillaryData.Pitch)
            self.roll.append(ens.AncillaryData.Roll)
            self.temperature.append(ens.AncillaryData.WaterTemp)
        else:
            self.heading.append(None)
            self.pitch.append(None)
            self.roll.append(None)
            self.temperature.append(None)

        if ens.IsEarthVelocity:
            avg_mag, avg_dir = ens.EarthVelocity.average_mag_dir()
            self.water_speed.append(avg_mag)
            self.water_dir.append(avg_dir)
        else:
            self.water_speed.append(None)
            self.water_dir.append(None)

        if ens.IsNmeaData:
            self.num_sats.append(ens.NmeaData.GPGGA.num_sats)
            self.gnss_qual.append(ens.NmeaData.GPGGA.gps_qual)
            self.gnss_hdop.append(ens.NmeaData.GPGGA.horizontal_dil)
            self.vtg_speed.append(ens.NmeaData.speed_m_s)
        else:
            self.num_sats.append(None)
            self.gnss_qual.append(None)
            self.gnss_hdop.append(None)
            self.vtg_speed.append(None)

        if ens.IsBottomTrack:
            # Get the EarthVelocity data
            bt_e0 = ens.BottomTrack.EarthVelocity[0]
            bt_e1 = ens.BottomTrack.EarthVelocity[1]
            bt_e2 = ens.BottomTrack.EarthVelocity[2]

            # Calculate the Magnitude and direction for the bottom track data
            bt_mag = EarthVelocity.calculate_magnitude(bt_e0, bt_e1, bt_e2)
            bt_dir = EarthVelocity.calculate_direction(bt_e0, bt_e1)

            if not Ensemble.is_bad_velocity(bt_mag):
                self.boat_speed.append(bt_mag)
                self.boat_dir.append(bt_dir)
            else:
                # Bad Earth Velocity
                self.boat_speed.append(None)
                self.boat_dir.append(None)
        else:
            # No Bottom Track
            self.boat_speed.append(None)
            self.boat_dir.append(None)

        self.thread_lock.release()
예제 #2
0
def test_direction():
    east = 1.33
    north = 1.45
    result = EarthVelocity.calculate_direction(east, north)
    assert 42.52 == pytest.approx(result, 0.01)