def test_mps_to_mmps():
    # Convert from m/s to mm/s
    num_bins = 30
    num_beams = 4

    vel = BeamVelocity(num_bins, num_beams)

    # Populate data
    val = 1.0
    for beam in range(vel.element_multiplier):
        for bin_num in range(vel.num_elements):
            vel.Velocities[bin_num][beam] = val
            val += 1.1

    assert vel.Velocities[0][0] == pytest.approx(1.0, 0.1)
    assert vel.Velocities[2][0] == pytest.approx(3.2, 0.1)
    assert vel.Velocities[0][1] == pytest.approx(34.0, 0.1)
    assert vel.Velocities[1][1] == pytest.approx(35.1, 0.1)

    beam0 = [v[0] for v in vel.Velocities]
    beam0_mm_p_s = [round(v * 1000) for v in beam0]

    beam1 = [v[1] for v in vel.Velocities]
    beam1_mm_p_s = [round(v * 1000) for v in beam1]

    beam2 = [v[2] for v in vel.Velocities]
    beam2_mm_p_s = [round(v * 1000) for v in beam2]

    beam3 = [v[3] for v in vel.Velocities]
    beam3_mm_p_s = [round(v * 1000) for v in beam3]

    assert beam0_mm_p_s[0] == pytest.approx(1000.0, 0.1)

    assert beam0_mm_p_s == vel.pd0_mm_per_sec(pd0_beam_num=3)   # RTB 0 = PD0 3
    assert beam1_mm_p_s == vel.pd0_mm_per_sec(pd0_beam_num=2)   # RTB 1 = PD0 2
    assert beam2_mm_p_s == vel.pd0_mm_per_sec(pd0_beam_num=0)   # RTB 2 = PD0 0
    assert beam3_mm_p_s == vel.pd0_mm_per_sec(pd0_beam_num=1)   # RTB 3 = PD0 1
def test_pd0_bad_vel():
    # Convert from m/s to mm/s
    num_bins = 30
    num_beams = 4

    vel = BeamVelocity(num_bins, num_beams)

    # Populate data
    val = 1.0
    for beam in range(vel.element_multiplier):
        for bin_num in range(vel.num_elements):
            vel.Velocities[bin_num][beam] = val
            val += 1.1

    vel.Velocities[0][0] = Ensemble.BadVelocity

    beam0_pd0 = vel.pd0_mm_per_sec(pd0_beam_num=3)

    assert beam0_pd0[0] == pytest.approx(-32768, 0.0)