Esempio n. 1
0
    def test_determine_pilot_from_hdf_control_column(self):
        '''
        Use Control Column Force (*) to determine the flying pilot
        '''
        import logging

        determine_pilot = DeterminePilot()
        # warning method is normally initialised with Node superclass in one of
        # the DeterminePilot's ancestors
        determine_pilot.warning = logging.warning
        determine_pilot.info = logging.info

        def test_from_file(hdf_path, _slice, phase_name, expected_pilot):
            (pitch_capt, pitch_fo, roll_capt, roll_fo, cc_capt, cc_fo,
             phase) = self.get_params(hdf_path, _slice, phase_name)

            pilot = determine_pilot._determine_pilot(
                None, pitch_capt, pitch_fo, roll_capt, roll_fo, None, None,
                phase, None, None)

            # pitch and roll are not enough to determine the pilot
            self.assertIsNone(pilot)

            pilot = determine_pilot._determine_pilot(
                None, pitch_capt, pitch_fo, roll_capt, roll_fo, cc_capt,
                cc_fo, phase, None, None)

            # control column force should allow to determine the pilot
            self.assertEqual(pilot, expected_pilot)

        items = [
            [
                os.path.join(test_data_path, 'identify_pilot_01.hdf5'),
                'Captain',
                'Captain',
                slice(686, 751),
                slice(40773, 40872)
            ],
            [
                os.path.join(test_data_path, 'identify_pilot_02.hdf5'),
                'First Officer',
                'First Officer',
                slice(1015, 1162),
                slice(41451, 41511)
            ],
        ]

        for fn, to_pilot, ld_pilot, to, ld in items:
            test_from_file(fn, to, 'Takeoff', to_pilot)
            test_from_file(fn, ld, 'Landing', ld_pilot)
Esempio n. 2
0
 def test__controls_changed(self):
     determine_pilot = DeterminePilot()
     slice_ = slice(0, 3)
     below_tolerance = np.ma.array([
         settings.CONTROLS_IN_USE_TOLERANCE / 4.0, 0, 0,
         settings.CONTROLS_IN_USE_TOLERANCE / 2.0, 0, 0,
     ])
     above_tolerance = np.ma.array([
         settings.CONTROLS_IN_USE_TOLERANCE * 4.0, 0, 0,
         settings.CONTROLS_IN_USE_TOLERANCE * 2.0, 0, 0,
     ])
     # Both pitch and roll below tolerance:
     pitch, roll = below_tolerance, below_tolerance
     change = determine_pilot._controls_changed(slice_, pitch, roll)
     self.assertFalse(change)
     # Pitch above tolerance:
     pitch, roll = above_tolerance, below_tolerance
     change = determine_pilot._controls_changed(slice_, pitch, roll)
     self.assertTrue(change)
     # Roll above tolerance:
     pitch, roll = below_tolerance, above_tolerance
     change = determine_pilot._controls_changed(slice_, pitch, roll)
     self.assertTrue(change)
     # Both pitch and roll above tolerance:
     pitch, roll = above_tolerance, above_tolerance
     change = determine_pilot._controls_changed(slice_, pitch, roll)
     self.assertTrue(change)
     # Both pitch and roll above tolerance outside of slice:
     slice_ = slice(1, 3)
     pitch, roll = above_tolerance, above_tolerance
     change = determine_pilot._controls_changed(slice_, pitch, roll)
     self.assertFalse(change)
Esempio n. 3
0
 def test__autopilot_engaged(self):
     determine_pilot = DeterminePilot()
     # No autopilots engaged:
     pilot = determine_pilot._autopilot_engaged(0, 0)
     self.assertEqual(pilot, None)
     # Autopilot 1 engaged:
     pilot = determine_pilot._autopilot_engaged(1, 0)
     self.assertEqual(pilot, 'Captain')
     # Autopilot 2 engaged:
     pilot = determine_pilot._autopilot_engaged(0, 1)
     self.assertEqual(pilot, 'First Officer')
     # Autopilots 1 & 2 engaged:
     pilot = determine_pilot._autopilot_engaged(1, 1)
     self.assertEqual(pilot, None)
Esempio n. 4
0
    def test__determine_pilot(self):
        determine_pilot = DeterminePilot()

        pitch_capt = Mock()
        pitch_fo = Mock()
        roll_capt = Mock()
        roll_fo = Mock()
        cc_capt = Mock()
        cc_fo = Mock()
        pitch_capt.array = Mock()
        pitch_fo.array = Mock()
        roll_capt.array = Mock()
        roll_fo.array = Mock()
        cc_capt.array = Mock()
        cc_fo.array = Mock()
        ap1 = Mock()
        ap2 = Mock()
        phase = Mock()

        determine_pilot._autopilot_engaged = Mock()
        determine_pilot._controls_in_use = Mock()
        determine_pilot._control_column_in_use = Mock()
        determine_pilot.set_flight_attr = Mock()

        def reset_all_mocks():
            determine_pilot._autopilot_engaged.reset_mock()
            determine_pilot._controls_in_use.reset_mock()
            determine_pilot._control_column_in_use.reset_mock()
            determine_pilot.set_flight_attr.reset_mock()

        # Controls in use, no phase.
        reset_all_mocks()
        pilot = determine_pilot._determine_pilot(
            None, pitch_capt, pitch_fo, roll_capt, roll_fo, cc_capt, cc_fo,
            None, None, None)
        self.assertFalse(determine_pilot._autopilot_engaged.called)
        self.assertFalse(determine_pilot._controls_in_use.called)
        self.assertEqual(pilot, None)
        # Controls in use with phase. Pilot cannot be discerned.
        reset_all_mocks()
        determine_pilot._controls_in_use.return_value = None
        determine_pilot._control_column_in_use.return_value = None
        pilot = determine_pilot._determine_pilot(
            None, pitch_capt, pitch_fo, roll_capt, roll_fo, cc_capt, cc_fo, 
            phase, None, None)
        self.assertFalse(determine_pilot._autopilot_engaged.called)
        determine_pilot._controls_in_use.assert_called_once_with(
            pitch_capt.array, pitch_fo.array, roll_capt.array, roll_fo.array,
            phase)
        determine_pilot._control_column_in_use.assert_called_once_with(
            cc_capt.array, cc_fo.array, phase)
        self.assertEqual(pilot, determine_pilot._controls_in_use.return_value)
        # Controls in use with phase. Pilot returned
        reset_all_mocks()
        determine_pilot._controls_in_use.return_value = 'Captain'
        pilot = determine_pilot._determine_pilot(
            None, pitch_capt, pitch_fo, roll_capt, roll_fo, cc_capt, cc_fo, phase,
            None, None)
        self.assertFalse(determine_pilot._autopilot_engaged.called)
        determine_pilot._controls_in_use.assert_called_once_with(pitch_capt.array, pitch_fo.array, roll_capt.array, roll_fo.array, phase)
        self.assertEqual(pilot, determine_pilot._controls_in_use.return_value)
        # Only Autopilot.
        reset_all_mocks()
        determine_pilot._autopilot_engaged.return_value = 'Captain'
        pilot = determine_pilot._determine_pilot(None, None, None, None, None, 
                                                 None, None, None, ap1, ap2)
        determine_pilot._autopilot_engaged.assert_called_once_with(ap1, ap2)
        self.assertFalse(determine_pilot._controls_in_use.called)
        self.assertEqual(pilot, determine_pilot._autopilot_engaged.return_value)
        # Controls in Use overrides Autopilot.
        reset_all_mocks()
        determine_pilot._controls_in_use.return_value = 'Captain'
        determine_pilot._autopilot_engaged.return_value = 'First Officer'
        pilot = determine_pilot._determine_pilot(
            None, pitch_capt, pitch_fo, roll_capt, roll_fo, cc_capt, cc_fo, 
            phase, ap1, ap2)
        self.assertFalse(determine_pilot._autopilot_engaged.called)
        determine_pilot._controls_in_use.assert_called_once_with(
            pitch_capt.array, pitch_fo.array, roll_capt.array, roll_fo.array, phase)
        self.assertEqual(pilot, determine_pilot._controls_in_use.return_value)
        # Autopilot is used when Controls in Use does not provide an answer.
        reset_all_mocks()
        determine_pilot._autopilot_engaged.return_value = 'First Officer'
        determine_pilot._controls_in_use.return_value = None
        determine_pilot._control_column_in_use.return_value = None
        pilot = determine_pilot._determine_pilot(
            None, pitch_capt, pitch_fo, roll_capt, roll_fo, cc_capt, cc_fo, phase,
            ap1, ap2)
        determine_pilot._autopilot_engaged.assert_called_once_with(ap1, ap2)
        determine_pilot._controls_in_use.assert_called_once_with(
            pitch_capt.array, pitch_fo.array, roll_capt.array, roll_fo.array,
            phase)
        self.assertEqual(pilot,
                         determine_pilot._autopilot_engaged.return_value)