5 #ifndef __pinocchio_autodiff_casadi_math_quaternion_hpp__ 
    6 #define __pinocchio_autodiff_casadi_math_quaternion_hpp__ 
   18       template<
typename _Scalar>
 
   21         typedef ::casadi::Matrix<_Scalar> 
Scalar;
 
   22         template<
typename Matrix3, 
typename QuaternionDerived>
 
   23         static inline void run(Eigen::QuaternionBase<QuaternionDerived> & 
q, 
const Matrix3 & mat)
 
   26             typename Eigen::internal::traits<QuaternionDerived>::Coefficients QuatCoefficients;
 
   29           typedef Eigen::Quaternion<Scalar, QuatCoefficientsPlainType::Options> QuaternionPlain;
 
   30           QuaternionPlain quat_t_positive;
 
   35           QuaternionPlain quat_t_negative_0, quat_t_negative_1, quat_t_negative_2;
 
   45             (cond1 && 
mat.coeff(2, 2) > 
mat.coeff(1, 1)) || (
mat.coeff(2, 2) > 
mat.coeff(0, 0));
 
   47           for (Eigen::DenseIndex k = 0; k < 4; ++k)
 
   49             Scalar t_is_negative_cond1 = Scalar::if_else(
 
   50               cond1, quat_t_negative_1.coeffs().coeff(k), quat_t_negative_0.coeffs().coeff(k));
 
   51             Scalar t_is_negative_cond2 =
 
   52               Scalar::if_else(cond2, quat_t_negative_2.coeffs().coeff(k), t_is_negative_cond1);
 
   54             q.coeffs().coeffRef(k) = Scalar::if_else(
 
   55               t_greater_than_zero, quat_t_positive.coeffs().coeff(k), t_is_negative_cond2);
 
   70     template<
class Scalar, 
int Options>
 
   71     struct quaternionbase_assign_impl<
Eigen::Matrix<::casadi::Matrix<Scalar>, 3, 3, Options>, 3, 3>
 
   73       template<
typename QuaternionDerived>
 
   75         QuaternionBase<QuaternionDerived> & q,
 
   76         const Eigen::Matrix<::casadi::Matrix<Scalar>, 3, 3, 
Options> & a_mat)
 
   79           ::casadi::Matrix<Scalar>, 
false>
::run(
q, a_mat);
 
   85 #endif // ifndef __pinocchio_autodiff_casadi_math_quaternion_hpp__