def get_jib_winch_position(self, apparentWindAngleRad, X1, X2):
        """
        Calculates the winch position of the jib according to the apparent wind angle.

        Arguments
        ---------
        float : apparentWindAngleRad
            The wind angle in radians

        float : X1
            Parameter for jib saturation function

        float : X2
            Parameter for jib saturation function

        Returns
        -------
        int
            The winch position of the jib
        """

        jibAngle = JibController.get_jib_angle(apparentWindAngleRad, X1, X2)
        smallChange = not ControllerOutputRefiner.lowPowerAngle(
            inputSignal=jibAngle, currAngle=self.__currJibAngleRad)

        if (self.__controlModeID
                == ControlModes.LOW_POWER.value) and (smallChange):
            winchPosition = JibController.get_winch_position(
                self.__currJibAngleRad, self.__winchQuantParam)
        else:
            self.__currJibAngleRad = jibAngle
            winchPosition = JibController.get_winch_position(
                jibAngle, self.__winchQuantParam)
        return winchPosition
 def test_quant_winch_position_360(self):
     quant_param = 360
     self.assertEqual(
         JibController.get_winch_position(math.pi / 5, quant_param), 144)
     self.assertEqual(
         JibController.get_winch_position(math.pi / 8, quant_param), 90)
     self.assertEqual(
         JibController.get_winch_position(math.pi / 16, quant_param), 45)
     self.assertEqual(
         JibController.get_winch_position(math.pi / 17, quant_param), 42)
     self.assertEqual(
         JibController.get_winch_position(math.pi / 3, quant_param), 239)
     self.assertEqual(
         JibController.get_winch_position(math.pi / 2.2, quant_param), 327)
     self.assertEqual(
         JibController.get_winch_position(math.pi / 2.5, quant_param), 288)
 def test_quant_winch_position_4(self):
     quant_param = 4
     self.assertEqual(
         JibController.get_winch_position(math.pi / 5, quant_param), 180)
     self.assertEqual(
         JibController.get_winch_position(math.pi / 8, quant_param), 90)
     self.assertEqual(
         JibController.get_winch_position(math.pi / 16, quant_param), 90)
     self.assertEqual(
         JibController.get_winch_position(math.pi / 17, quant_param), 0)
     self.assertEqual(
         JibController.get_winch_position(math.pi / 3, quant_param), 270)
     self.assertEqual(
         JibController.get_winch_position(math.pi / 2.2, quant_param), 360)
     self.assertEqual(
         JibController.get_winch_position(math.pi / 2.5, quant_param), 270)