#ifndef TESTHYQ_TRANSFORMS_H_
#define TESTHYQ_TRANSFORMS_H_

#include <Eigen/Dense>
#include <iit/rbd/TransformsBase.h>
#include "declarations.h"
#include <iit/rbd/traits/DoubleTrait.h>
#include "kinematics_parameters.h"

namespace iit {
namespace TestHyQ {

template<typename SCALAR, class M>
class TransformMotion : public iit::rbd::SpatialTransformBase<tpl::JointState<SCALAR>, M> {
public:
    EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};

template<typename SCALAR, class M>
class TransformForce : public iit::rbd::SpatialTransformBase<tpl::JointState<SCALAR>, M> {
public:
    EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};

template<typename SCALAR, class M>
class TransformHomogeneous : public iit::rbd::HomogeneousTransformBase<tpl::JointState<SCALAR>, M> {
public:
    EIGEN_MAKE_ALIGNED_OPERATOR_NEW
};

namespace tpl {

/**
 * The class for the 6-by-6 coordinates transformation matrices for
 * spatial motion vectors.
 */
template <typename TRAIT>
class MotionTransforms {
public:
    EIGEN_MAKE_ALIGNED_OPERATOR_NEW
    typedef typename TRAIT::Scalar Scalar;

    typedef JointState<Scalar> JState;
    class Dummy {};
    typedef typename TransformMotion<Scalar, Dummy>::MatrixType MatrixType;
public:
    class Type_fr_trunk_X_fr_LF_hipassembly : public TransformMotion<Scalar, Type_fr_trunk_X_fr_LF_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_hipassembly();
        const Type_fr_trunk_X_fr_LF_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_hipassembly : public TransformMotion<Scalar, Type_fr_trunk_X_fr_RF_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_hipassembly();
        const Type_fr_trunk_X_fr_RF_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_hipassembly : public TransformMotion<Scalar, Type_fr_trunk_X_fr_LH_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_hipassembly();
        const Type_fr_trunk_X_fr_LH_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_hipassembly : public TransformMotion<Scalar, Type_fr_trunk_X_fr_RH_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_hipassembly();
        const Type_fr_trunk_X_fr_RH_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LF_upperleg : public TransformMotion<Scalar, Type_fr_trunk_X_fr_LF_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_upperleg();
        const Type_fr_trunk_X_fr_LF_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_upperleg : public TransformMotion<Scalar, Type_fr_trunk_X_fr_RF_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_upperleg();
        const Type_fr_trunk_X_fr_RF_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_upperleg : public TransformMotion<Scalar, Type_fr_trunk_X_fr_LH_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_upperleg();
        const Type_fr_trunk_X_fr_LH_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_upperleg : public TransformMotion<Scalar, Type_fr_trunk_X_fr_RH_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_upperleg();
        const Type_fr_trunk_X_fr_RH_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LF_lowerleg : public TransformMotion<Scalar, Type_fr_trunk_X_fr_LF_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_lowerleg();
        const Type_fr_trunk_X_fr_LF_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_lowerleg : public TransformMotion<Scalar, Type_fr_trunk_X_fr_RF_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_lowerleg();
        const Type_fr_trunk_X_fr_RF_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_lowerleg : public TransformMotion<Scalar, Type_fr_trunk_X_fr_LH_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_lowerleg();
        const Type_fr_trunk_X_fr_LH_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_lowerleg : public TransformMotion<Scalar, Type_fr_trunk_X_fr_RH_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_lowerleg();
        const Type_fr_trunk_X_fr_RH_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_LF_hipassembly_X_fr_trunk : public TransformMotion<Scalar, Type_fr_LF_hipassembly_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_hipassembly_X_fr_trunk();
        const Type_fr_LF_hipassembly_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RF_hipassembly_X_fr_trunk : public TransformMotion<Scalar, Type_fr_RF_hipassembly_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_hipassembly_X_fr_trunk();
        const Type_fr_RF_hipassembly_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_LH_hipassembly_X_fr_trunk : public TransformMotion<Scalar, Type_fr_LH_hipassembly_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_hipassembly_X_fr_trunk();
        const Type_fr_LH_hipassembly_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RH_hipassembly_X_fr_trunk : public TransformMotion<Scalar, Type_fr_RH_hipassembly_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_hipassembly_X_fr_trunk();
        const Type_fr_RH_hipassembly_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_LF_upperleg_X_fr_trunk : public TransformMotion<Scalar, Type_fr_LF_upperleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_upperleg_X_fr_trunk();
        const Type_fr_LF_upperleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RF_upperleg_X_fr_trunk : public TransformMotion<Scalar, Type_fr_RF_upperleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_upperleg_X_fr_trunk();
        const Type_fr_RF_upperleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_LH_upperleg_X_fr_trunk : public TransformMotion<Scalar, Type_fr_LH_upperleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_upperleg_X_fr_trunk();
        const Type_fr_LH_upperleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RH_upperleg_X_fr_trunk : public TransformMotion<Scalar, Type_fr_RH_upperleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_upperleg_X_fr_trunk();
        const Type_fr_RH_upperleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_LF_lowerleg_X_fr_trunk : public TransformMotion<Scalar, Type_fr_LF_lowerleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_lowerleg_X_fr_trunk();
        const Type_fr_LF_lowerleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RF_lowerleg_X_fr_trunk : public TransformMotion<Scalar, Type_fr_RF_lowerleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_lowerleg_X_fr_trunk();
        const Type_fr_RF_lowerleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_LH_lowerleg_X_fr_trunk : public TransformMotion<Scalar, Type_fr_LH_lowerleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_lowerleg_X_fr_trunk();
        const Type_fr_LH_lowerleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RH_lowerleg_X_fr_trunk : public TransformMotion<Scalar, Type_fr_RH_lowerleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_lowerleg_X_fr_trunk();
        const Type_fr_RH_lowerleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_LF_hipassemblyCOM : public TransformMotion<Scalar, Type_fr_trunk_X_LF_hipassemblyCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_LF_hipassemblyCOM();
        const Type_fr_trunk_X_LF_hipassemblyCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_RF_hipassemblyCOM : public TransformMotion<Scalar, Type_fr_trunk_X_RF_hipassemblyCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_RF_hipassemblyCOM();
        const Type_fr_trunk_X_RF_hipassemblyCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_LH_hipassemblyCOM : public TransformMotion<Scalar, Type_fr_trunk_X_LH_hipassemblyCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_LH_hipassemblyCOM();
        const Type_fr_trunk_X_LH_hipassemblyCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_RH_hipassemblyCOM : public TransformMotion<Scalar, Type_fr_trunk_X_RH_hipassemblyCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_RH_hipassemblyCOM();
        const Type_fr_trunk_X_RH_hipassemblyCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_LF_upperlegCOM : public TransformMotion<Scalar, Type_fr_trunk_X_LF_upperlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_LF_upperlegCOM();
        const Type_fr_trunk_X_LF_upperlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_RF_upperlegCOM : public TransformMotion<Scalar, Type_fr_trunk_X_RF_upperlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_RF_upperlegCOM();
        const Type_fr_trunk_X_RF_upperlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_LH_upperlegCOM : public TransformMotion<Scalar, Type_fr_trunk_X_LH_upperlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_LH_upperlegCOM();
        const Type_fr_trunk_X_LH_upperlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_RH_upperlegCOM : public TransformMotion<Scalar, Type_fr_trunk_X_RH_upperlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_RH_upperlegCOM();
        const Type_fr_trunk_X_RH_upperlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_LF_lowerlegCOM : public TransformMotion<Scalar, Type_fr_trunk_X_LF_lowerlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_LF_lowerlegCOM();
        const Type_fr_trunk_X_LF_lowerlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_RF_lowerlegCOM : public TransformMotion<Scalar, Type_fr_trunk_X_RF_lowerlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_RF_lowerlegCOM();
        const Type_fr_trunk_X_RF_lowerlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_LH_lowerlegCOM : public TransformMotion<Scalar, Type_fr_trunk_X_LH_lowerlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_LH_lowerlegCOM();
        const Type_fr_trunk_X_LH_lowerlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_RH_lowerlegCOM : public TransformMotion<Scalar, Type_fr_trunk_X_RH_lowerlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_RH_lowerlegCOM();
        const Type_fr_trunk_X_RH_lowerlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_LF_foot_X_fr_LF_lowerleg : public TransformMotion<Scalar, Type_fr_LF_foot_X_fr_LF_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_foot_X_fr_LF_lowerleg();
        const Type_fr_LF_foot_X_fr_LF_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_RF_foot_X_fr_RF_lowerleg : public TransformMotion<Scalar, Type_fr_RF_foot_X_fr_RF_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_foot_X_fr_RF_lowerleg();
        const Type_fr_RF_foot_X_fr_RF_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_LH_foot_X_fr_LH_lowerleg : public TransformMotion<Scalar, Type_fr_LH_foot_X_fr_LH_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_foot_X_fr_LH_lowerleg();
        const Type_fr_LH_foot_X_fr_LH_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_RH_foot_X_fr_RH_lowerleg : public TransformMotion<Scalar, Type_fr_RH_foot_X_fr_RH_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_foot_X_fr_RH_lowerleg();
        const Type_fr_RH_foot_X_fr_RH_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LF_foot : public TransformMotion<Scalar, Type_fr_trunk_X_fr_LF_foot>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_foot();
        const Type_fr_trunk_X_fr_LF_foot& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_foot : public TransformMotion<Scalar, Type_fr_trunk_X_fr_RF_foot>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_foot();
        const Type_fr_trunk_X_fr_RF_foot& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_foot : public TransformMotion<Scalar, Type_fr_trunk_X_fr_LH_foot>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_foot();
        const Type_fr_trunk_X_fr_LH_foot& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_foot : public TransformMotion<Scalar, Type_fr_trunk_X_fr_RH_foot>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_foot();
        const Type_fr_trunk_X_fr_RH_foot& update(const JState&);
    protected:
    };

    class Type_fr_LF_foot_X_fr_trunk : public TransformMotion<Scalar, Type_fr_LF_foot_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_foot_X_fr_trunk();
        const Type_fr_LF_foot_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RF_foot_X_fr_trunk : public TransformMotion<Scalar, Type_fr_RF_foot_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_foot_X_fr_trunk();
        const Type_fr_RF_foot_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_LH_foot_X_fr_trunk : public TransformMotion<Scalar, Type_fr_LH_foot_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_foot_X_fr_trunk();
        const Type_fr_LH_foot_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RH_foot_X_fr_trunk : public TransformMotion<Scalar, Type_fr_RH_foot_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_foot_X_fr_trunk();
        const Type_fr_RH_foot_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LF_HAA : public TransformMotion<Scalar, Type_fr_trunk_X_fr_LF_HAA>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_HAA();
        const Type_fr_trunk_X_fr_LF_HAA& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_HAA : public TransformMotion<Scalar, Type_fr_trunk_X_fr_RF_HAA>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_HAA();
        const Type_fr_trunk_X_fr_RF_HAA& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_HAA : public TransformMotion<Scalar, Type_fr_trunk_X_fr_LH_HAA>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_HAA();
        const Type_fr_trunk_X_fr_LH_HAA& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_HAA : public TransformMotion<Scalar, Type_fr_trunk_X_fr_RH_HAA>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_HAA();
        const Type_fr_trunk_X_fr_RH_HAA& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LF_HFE : public TransformMotion<Scalar, Type_fr_trunk_X_fr_LF_HFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_HFE();
        const Type_fr_trunk_X_fr_LF_HFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_HFE : public TransformMotion<Scalar, Type_fr_trunk_X_fr_RF_HFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_HFE();
        const Type_fr_trunk_X_fr_RF_HFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_HFE : public TransformMotion<Scalar, Type_fr_trunk_X_fr_LH_HFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_HFE();
        const Type_fr_trunk_X_fr_LH_HFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_HFE : public TransformMotion<Scalar, Type_fr_trunk_X_fr_RH_HFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_HFE();
        const Type_fr_trunk_X_fr_RH_HFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LF_KFE : public TransformMotion<Scalar, Type_fr_trunk_X_fr_LF_KFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_KFE();
        const Type_fr_trunk_X_fr_LF_KFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_KFE : public TransformMotion<Scalar, Type_fr_trunk_X_fr_RF_KFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_KFE();
        const Type_fr_trunk_X_fr_RF_KFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_KFE : public TransformMotion<Scalar, Type_fr_trunk_X_fr_LH_KFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_KFE();
        const Type_fr_trunk_X_fr_LH_KFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_KFE : public TransformMotion<Scalar, Type_fr_trunk_X_fr_RH_KFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_KFE();
        const Type_fr_trunk_X_fr_RH_KFE& update(const JState&);
    protected:
    };

    class Type_fr_LF_upperleg_X_fr_LF_hipassembly : public TransformMotion<Scalar, Type_fr_LF_upperleg_X_fr_LF_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_upperleg_X_fr_LF_hipassembly();
        const Type_fr_LF_upperleg_X_fr_LF_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_LF_hipassembly_X_fr_LF_upperleg : public TransformMotion<Scalar, Type_fr_LF_hipassembly_X_fr_LF_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_hipassembly_X_fr_LF_upperleg();
        const Type_fr_LF_hipassembly_X_fr_LF_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_LF_lowerleg_X_fr_LF_upperleg : public TransformMotion<Scalar, Type_fr_LF_lowerleg_X_fr_LF_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_lowerleg_X_fr_LF_upperleg();
        const Type_fr_LF_lowerleg_X_fr_LF_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_LF_upperleg_X_fr_LF_lowerleg : public TransformMotion<Scalar, Type_fr_LF_upperleg_X_fr_LF_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_upperleg_X_fr_LF_lowerleg();
        const Type_fr_LF_upperleg_X_fr_LF_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_RF_upperleg_X_fr_RF_hipassembly : public TransformMotion<Scalar, Type_fr_RF_upperleg_X_fr_RF_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_upperleg_X_fr_RF_hipassembly();
        const Type_fr_RF_upperleg_X_fr_RF_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_RF_hipassembly_X_fr_RF_upperleg : public TransformMotion<Scalar, Type_fr_RF_hipassembly_X_fr_RF_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_hipassembly_X_fr_RF_upperleg();
        const Type_fr_RF_hipassembly_X_fr_RF_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_RF_lowerleg_X_fr_RF_upperleg : public TransformMotion<Scalar, Type_fr_RF_lowerleg_X_fr_RF_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_lowerleg_X_fr_RF_upperleg();
        const Type_fr_RF_lowerleg_X_fr_RF_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_RF_upperleg_X_fr_RF_lowerleg : public TransformMotion<Scalar, Type_fr_RF_upperleg_X_fr_RF_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_upperleg_X_fr_RF_lowerleg();
        const Type_fr_RF_upperleg_X_fr_RF_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_LH_upperleg_X_fr_LH_hipassembly : public TransformMotion<Scalar, Type_fr_LH_upperleg_X_fr_LH_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_upperleg_X_fr_LH_hipassembly();
        const Type_fr_LH_upperleg_X_fr_LH_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_LH_hipassembly_X_fr_LH_upperleg : public TransformMotion<Scalar, Type_fr_LH_hipassembly_X_fr_LH_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_hipassembly_X_fr_LH_upperleg();
        const Type_fr_LH_hipassembly_X_fr_LH_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_LH_lowerleg_X_fr_LH_upperleg : public TransformMotion<Scalar, Type_fr_LH_lowerleg_X_fr_LH_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_lowerleg_X_fr_LH_upperleg();
        const Type_fr_LH_lowerleg_X_fr_LH_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_LH_upperleg_X_fr_LH_lowerleg : public TransformMotion<Scalar, Type_fr_LH_upperleg_X_fr_LH_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_upperleg_X_fr_LH_lowerleg();
        const Type_fr_LH_upperleg_X_fr_LH_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_RH_upperleg_X_fr_RH_hipassembly : public TransformMotion<Scalar, Type_fr_RH_upperleg_X_fr_RH_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_upperleg_X_fr_RH_hipassembly();
        const Type_fr_RH_upperleg_X_fr_RH_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_RH_hipassembly_X_fr_RH_upperleg : public TransformMotion<Scalar, Type_fr_RH_hipassembly_X_fr_RH_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_hipassembly_X_fr_RH_upperleg();
        const Type_fr_RH_hipassembly_X_fr_RH_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_RH_lowerleg_X_fr_RH_upperleg : public TransformMotion<Scalar, Type_fr_RH_lowerleg_X_fr_RH_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_lowerleg_X_fr_RH_upperleg();
        const Type_fr_RH_lowerleg_X_fr_RH_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_RH_upperleg_X_fr_RH_lowerleg : public TransformMotion<Scalar, Type_fr_RH_upperleg_X_fr_RH_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_upperleg_X_fr_RH_lowerleg();
        const Type_fr_RH_upperleg_X_fr_RH_lowerleg& update(const JState&);
    protected:
    };

public:
    MotionTransforms();
    void updateParameters();
    Type_fr_trunk_X_fr_LF_hipassembly fr_trunk_X_fr_LF_hipassembly;
    Type_fr_trunk_X_fr_RF_hipassembly fr_trunk_X_fr_RF_hipassembly;
    Type_fr_trunk_X_fr_LH_hipassembly fr_trunk_X_fr_LH_hipassembly;
    Type_fr_trunk_X_fr_RH_hipassembly fr_trunk_X_fr_RH_hipassembly;
    Type_fr_trunk_X_fr_LF_upperleg fr_trunk_X_fr_LF_upperleg;
    Type_fr_trunk_X_fr_RF_upperleg fr_trunk_X_fr_RF_upperleg;
    Type_fr_trunk_X_fr_LH_upperleg fr_trunk_X_fr_LH_upperleg;
    Type_fr_trunk_X_fr_RH_upperleg fr_trunk_X_fr_RH_upperleg;
    Type_fr_trunk_X_fr_LF_lowerleg fr_trunk_X_fr_LF_lowerleg;
    Type_fr_trunk_X_fr_RF_lowerleg fr_trunk_X_fr_RF_lowerleg;
    Type_fr_trunk_X_fr_LH_lowerleg fr_trunk_X_fr_LH_lowerleg;
    Type_fr_trunk_X_fr_RH_lowerleg fr_trunk_X_fr_RH_lowerleg;
    Type_fr_LF_hipassembly_X_fr_trunk fr_LF_hipassembly_X_fr_trunk;
    Type_fr_RF_hipassembly_X_fr_trunk fr_RF_hipassembly_X_fr_trunk;
    Type_fr_LH_hipassembly_X_fr_trunk fr_LH_hipassembly_X_fr_trunk;
    Type_fr_RH_hipassembly_X_fr_trunk fr_RH_hipassembly_X_fr_trunk;
    Type_fr_LF_upperleg_X_fr_trunk fr_LF_upperleg_X_fr_trunk;
    Type_fr_RF_upperleg_X_fr_trunk fr_RF_upperleg_X_fr_trunk;
    Type_fr_LH_upperleg_X_fr_trunk fr_LH_upperleg_X_fr_trunk;
    Type_fr_RH_upperleg_X_fr_trunk fr_RH_upperleg_X_fr_trunk;
    Type_fr_LF_lowerleg_X_fr_trunk fr_LF_lowerleg_X_fr_trunk;
    Type_fr_RF_lowerleg_X_fr_trunk fr_RF_lowerleg_X_fr_trunk;
    Type_fr_LH_lowerleg_X_fr_trunk fr_LH_lowerleg_X_fr_trunk;
    Type_fr_RH_lowerleg_X_fr_trunk fr_RH_lowerleg_X_fr_trunk;
    Type_fr_trunk_X_LF_hipassemblyCOM fr_trunk_X_LF_hipassemblyCOM;
    Type_fr_trunk_X_RF_hipassemblyCOM fr_trunk_X_RF_hipassemblyCOM;
    Type_fr_trunk_X_LH_hipassemblyCOM fr_trunk_X_LH_hipassemblyCOM;
    Type_fr_trunk_X_RH_hipassemblyCOM fr_trunk_X_RH_hipassemblyCOM;
    Type_fr_trunk_X_LF_upperlegCOM fr_trunk_X_LF_upperlegCOM;
    Type_fr_trunk_X_RF_upperlegCOM fr_trunk_X_RF_upperlegCOM;
    Type_fr_trunk_X_LH_upperlegCOM fr_trunk_X_LH_upperlegCOM;
    Type_fr_trunk_X_RH_upperlegCOM fr_trunk_X_RH_upperlegCOM;
    Type_fr_trunk_X_LF_lowerlegCOM fr_trunk_X_LF_lowerlegCOM;
    Type_fr_trunk_X_RF_lowerlegCOM fr_trunk_X_RF_lowerlegCOM;
    Type_fr_trunk_X_LH_lowerlegCOM fr_trunk_X_LH_lowerlegCOM;
    Type_fr_trunk_X_RH_lowerlegCOM fr_trunk_X_RH_lowerlegCOM;
    Type_fr_LF_foot_X_fr_LF_lowerleg fr_LF_foot_X_fr_LF_lowerleg;
    Type_fr_RF_foot_X_fr_RF_lowerleg fr_RF_foot_X_fr_RF_lowerleg;
    Type_fr_LH_foot_X_fr_LH_lowerleg fr_LH_foot_X_fr_LH_lowerleg;
    Type_fr_RH_foot_X_fr_RH_lowerleg fr_RH_foot_X_fr_RH_lowerleg;
    Type_fr_trunk_X_fr_LF_foot fr_trunk_X_fr_LF_foot;
    Type_fr_trunk_X_fr_RF_foot fr_trunk_X_fr_RF_foot;
    Type_fr_trunk_X_fr_LH_foot fr_trunk_X_fr_LH_foot;
    Type_fr_trunk_X_fr_RH_foot fr_trunk_X_fr_RH_foot;
    Type_fr_LF_foot_X_fr_trunk fr_LF_foot_X_fr_trunk;
    Type_fr_RF_foot_X_fr_trunk fr_RF_foot_X_fr_trunk;
    Type_fr_LH_foot_X_fr_trunk fr_LH_foot_X_fr_trunk;
    Type_fr_RH_foot_X_fr_trunk fr_RH_foot_X_fr_trunk;
    Type_fr_trunk_X_fr_LF_HAA fr_trunk_X_fr_LF_HAA;
    Type_fr_trunk_X_fr_RF_HAA fr_trunk_X_fr_RF_HAA;
    Type_fr_trunk_X_fr_LH_HAA fr_trunk_X_fr_LH_HAA;
    Type_fr_trunk_X_fr_RH_HAA fr_trunk_X_fr_RH_HAA;
    Type_fr_trunk_X_fr_LF_HFE fr_trunk_X_fr_LF_HFE;
    Type_fr_trunk_X_fr_RF_HFE fr_trunk_X_fr_RF_HFE;
    Type_fr_trunk_X_fr_LH_HFE fr_trunk_X_fr_LH_HFE;
    Type_fr_trunk_X_fr_RH_HFE fr_trunk_X_fr_RH_HFE;
    Type_fr_trunk_X_fr_LF_KFE fr_trunk_X_fr_LF_KFE;
    Type_fr_trunk_X_fr_RF_KFE fr_trunk_X_fr_RF_KFE;
    Type_fr_trunk_X_fr_LH_KFE fr_trunk_X_fr_LH_KFE;
    Type_fr_trunk_X_fr_RH_KFE fr_trunk_X_fr_RH_KFE;
    Type_fr_LF_upperleg_X_fr_LF_hipassembly fr_LF_upperleg_X_fr_LF_hipassembly;
    Type_fr_LF_hipassembly_X_fr_LF_upperleg fr_LF_hipassembly_X_fr_LF_upperleg;
    Type_fr_LF_lowerleg_X_fr_LF_upperleg fr_LF_lowerleg_X_fr_LF_upperleg;
    Type_fr_LF_upperleg_X_fr_LF_lowerleg fr_LF_upperleg_X_fr_LF_lowerleg;
    Type_fr_RF_upperleg_X_fr_RF_hipassembly fr_RF_upperleg_X_fr_RF_hipassembly;
    Type_fr_RF_hipassembly_X_fr_RF_upperleg fr_RF_hipassembly_X_fr_RF_upperleg;
    Type_fr_RF_lowerleg_X_fr_RF_upperleg fr_RF_lowerleg_X_fr_RF_upperleg;
    Type_fr_RF_upperleg_X_fr_RF_lowerleg fr_RF_upperleg_X_fr_RF_lowerleg;
    Type_fr_LH_upperleg_X_fr_LH_hipassembly fr_LH_upperleg_X_fr_LH_hipassembly;
    Type_fr_LH_hipassembly_X_fr_LH_upperleg fr_LH_hipassembly_X_fr_LH_upperleg;
    Type_fr_LH_lowerleg_X_fr_LH_upperleg fr_LH_lowerleg_X_fr_LH_upperleg;
    Type_fr_LH_upperleg_X_fr_LH_lowerleg fr_LH_upperleg_X_fr_LH_lowerleg;
    Type_fr_RH_upperleg_X_fr_RH_hipassembly fr_RH_upperleg_X_fr_RH_hipassembly;
    Type_fr_RH_hipassembly_X_fr_RH_upperleg fr_RH_hipassembly_X_fr_RH_upperleg;
    Type_fr_RH_lowerleg_X_fr_RH_upperleg fr_RH_lowerleg_X_fr_RH_upperleg;
    Type_fr_RH_upperleg_X_fr_RH_lowerleg fr_RH_upperleg_X_fr_RH_lowerleg;

protected:

}; //class 'MotionTransforms'

/**
 * The class for the 6-by-6 coordinates transformation matrices for
 * spatial force vectors.
 */
template <typename TRAIT>
class ForceTransforms {
public:
    EIGEN_MAKE_ALIGNED_OPERATOR_NEW
    typedef typename TRAIT::Scalar Scalar;

    typedef JointState<Scalar> JState;
    class Dummy {};
    typedef typename TransformForce<Scalar, Dummy>::MatrixType MatrixType;
public:
    class Type_fr_trunk_X_fr_LF_hipassembly : public TransformForce<Scalar, Type_fr_trunk_X_fr_LF_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_hipassembly();
        const Type_fr_trunk_X_fr_LF_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_hipassembly : public TransformForce<Scalar, Type_fr_trunk_X_fr_RF_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_hipassembly();
        const Type_fr_trunk_X_fr_RF_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_hipassembly : public TransformForce<Scalar, Type_fr_trunk_X_fr_LH_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_hipassembly();
        const Type_fr_trunk_X_fr_LH_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_hipassembly : public TransformForce<Scalar, Type_fr_trunk_X_fr_RH_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_hipassembly();
        const Type_fr_trunk_X_fr_RH_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LF_upperleg : public TransformForce<Scalar, Type_fr_trunk_X_fr_LF_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_upperleg();
        const Type_fr_trunk_X_fr_LF_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_upperleg : public TransformForce<Scalar, Type_fr_trunk_X_fr_RF_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_upperleg();
        const Type_fr_trunk_X_fr_RF_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_upperleg : public TransformForce<Scalar, Type_fr_trunk_X_fr_LH_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_upperleg();
        const Type_fr_trunk_X_fr_LH_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_upperleg : public TransformForce<Scalar, Type_fr_trunk_X_fr_RH_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_upperleg();
        const Type_fr_trunk_X_fr_RH_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LF_lowerleg : public TransformForce<Scalar, Type_fr_trunk_X_fr_LF_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_lowerleg();
        const Type_fr_trunk_X_fr_LF_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_lowerleg : public TransformForce<Scalar, Type_fr_trunk_X_fr_RF_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_lowerleg();
        const Type_fr_trunk_X_fr_RF_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_lowerleg : public TransformForce<Scalar, Type_fr_trunk_X_fr_LH_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_lowerleg();
        const Type_fr_trunk_X_fr_LH_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_lowerleg : public TransformForce<Scalar, Type_fr_trunk_X_fr_RH_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_lowerleg();
        const Type_fr_trunk_X_fr_RH_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_LF_hipassembly_X_fr_trunk : public TransformForce<Scalar, Type_fr_LF_hipassembly_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_hipassembly_X_fr_trunk();
        const Type_fr_LF_hipassembly_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RF_hipassembly_X_fr_trunk : public TransformForce<Scalar, Type_fr_RF_hipassembly_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_hipassembly_X_fr_trunk();
        const Type_fr_RF_hipassembly_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_LH_hipassembly_X_fr_trunk : public TransformForce<Scalar, Type_fr_LH_hipassembly_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_hipassembly_X_fr_trunk();
        const Type_fr_LH_hipassembly_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RH_hipassembly_X_fr_trunk : public TransformForce<Scalar, Type_fr_RH_hipassembly_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_hipassembly_X_fr_trunk();
        const Type_fr_RH_hipassembly_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_LF_upperleg_X_fr_trunk : public TransformForce<Scalar, Type_fr_LF_upperleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_upperleg_X_fr_trunk();
        const Type_fr_LF_upperleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RF_upperleg_X_fr_trunk : public TransformForce<Scalar, Type_fr_RF_upperleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_upperleg_X_fr_trunk();
        const Type_fr_RF_upperleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_LH_upperleg_X_fr_trunk : public TransformForce<Scalar, Type_fr_LH_upperleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_upperleg_X_fr_trunk();
        const Type_fr_LH_upperleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RH_upperleg_X_fr_trunk : public TransformForce<Scalar, Type_fr_RH_upperleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_upperleg_X_fr_trunk();
        const Type_fr_RH_upperleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_LF_lowerleg_X_fr_trunk : public TransformForce<Scalar, Type_fr_LF_lowerleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_lowerleg_X_fr_trunk();
        const Type_fr_LF_lowerleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RF_lowerleg_X_fr_trunk : public TransformForce<Scalar, Type_fr_RF_lowerleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_lowerleg_X_fr_trunk();
        const Type_fr_RF_lowerleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_LH_lowerleg_X_fr_trunk : public TransformForce<Scalar, Type_fr_LH_lowerleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_lowerleg_X_fr_trunk();
        const Type_fr_LH_lowerleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RH_lowerleg_X_fr_trunk : public TransformForce<Scalar, Type_fr_RH_lowerleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_lowerleg_X_fr_trunk();
        const Type_fr_RH_lowerleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_LF_hipassemblyCOM : public TransformForce<Scalar, Type_fr_trunk_X_LF_hipassemblyCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_LF_hipassemblyCOM();
        const Type_fr_trunk_X_LF_hipassemblyCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_RF_hipassemblyCOM : public TransformForce<Scalar, Type_fr_trunk_X_RF_hipassemblyCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_RF_hipassemblyCOM();
        const Type_fr_trunk_X_RF_hipassemblyCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_LH_hipassemblyCOM : public TransformForce<Scalar, Type_fr_trunk_X_LH_hipassemblyCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_LH_hipassemblyCOM();
        const Type_fr_trunk_X_LH_hipassemblyCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_RH_hipassemblyCOM : public TransformForce<Scalar, Type_fr_trunk_X_RH_hipassemblyCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_RH_hipassemblyCOM();
        const Type_fr_trunk_X_RH_hipassemblyCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_LF_upperlegCOM : public TransformForce<Scalar, Type_fr_trunk_X_LF_upperlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_LF_upperlegCOM();
        const Type_fr_trunk_X_LF_upperlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_RF_upperlegCOM : public TransformForce<Scalar, Type_fr_trunk_X_RF_upperlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_RF_upperlegCOM();
        const Type_fr_trunk_X_RF_upperlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_LH_upperlegCOM : public TransformForce<Scalar, Type_fr_trunk_X_LH_upperlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_LH_upperlegCOM();
        const Type_fr_trunk_X_LH_upperlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_RH_upperlegCOM : public TransformForce<Scalar, Type_fr_trunk_X_RH_upperlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_RH_upperlegCOM();
        const Type_fr_trunk_X_RH_upperlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_LF_lowerlegCOM : public TransformForce<Scalar, Type_fr_trunk_X_LF_lowerlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_LF_lowerlegCOM();
        const Type_fr_trunk_X_LF_lowerlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_RF_lowerlegCOM : public TransformForce<Scalar, Type_fr_trunk_X_RF_lowerlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_RF_lowerlegCOM();
        const Type_fr_trunk_X_RF_lowerlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_LH_lowerlegCOM : public TransformForce<Scalar, Type_fr_trunk_X_LH_lowerlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_LH_lowerlegCOM();
        const Type_fr_trunk_X_LH_lowerlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_RH_lowerlegCOM : public TransformForce<Scalar, Type_fr_trunk_X_RH_lowerlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_RH_lowerlegCOM();
        const Type_fr_trunk_X_RH_lowerlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_LF_foot_X_fr_LF_lowerleg : public TransformForce<Scalar, Type_fr_LF_foot_X_fr_LF_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_foot_X_fr_LF_lowerleg();
        const Type_fr_LF_foot_X_fr_LF_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_RF_foot_X_fr_RF_lowerleg : public TransformForce<Scalar, Type_fr_RF_foot_X_fr_RF_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_foot_X_fr_RF_lowerleg();
        const Type_fr_RF_foot_X_fr_RF_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_LH_foot_X_fr_LH_lowerleg : public TransformForce<Scalar, Type_fr_LH_foot_X_fr_LH_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_foot_X_fr_LH_lowerleg();
        const Type_fr_LH_foot_X_fr_LH_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_RH_foot_X_fr_RH_lowerleg : public TransformForce<Scalar, Type_fr_RH_foot_X_fr_RH_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_foot_X_fr_RH_lowerleg();
        const Type_fr_RH_foot_X_fr_RH_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LF_foot : public TransformForce<Scalar, Type_fr_trunk_X_fr_LF_foot>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_foot();
        const Type_fr_trunk_X_fr_LF_foot& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_foot : public TransformForce<Scalar, Type_fr_trunk_X_fr_RF_foot>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_foot();
        const Type_fr_trunk_X_fr_RF_foot& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_foot : public TransformForce<Scalar, Type_fr_trunk_X_fr_LH_foot>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_foot();
        const Type_fr_trunk_X_fr_LH_foot& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_foot : public TransformForce<Scalar, Type_fr_trunk_X_fr_RH_foot>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_foot();
        const Type_fr_trunk_X_fr_RH_foot& update(const JState&);
    protected:
    };

    class Type_fr_LF_foot_X_fr_trunk : public TransformForce<Scalar, Type_fr_LF_foot_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_foot_X_fr_trunk();
        const Type_fr_LF_foot_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RF_foot_X_fr_trunk : public TransformForce<Scalar, Type_fr_RF_foot_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_foot_X_fr_trunk();
        const Type_fr_RF_foot_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_LH_foot_X_fr_trunk : public TransformForce<Scalar, Type_fr_LH_foot_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_foot_X_fr_trunk();
        const Type_fr_LH_foot_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RH_foot_X_fr_trunk : public TransformForce<Scalar, Type_fr_RH_foot_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_foot_X_fr_trunk();
        const Type_fr_RH_foot_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LF_HAA : public TransformForce<Scalar, Type_fr_trunk_X_fr_LF_HAA>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_HAA();
        const Type_fr_trunk_X_fr_LF_HAA& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_HAA : public TransformForce<Scalar, Type_fr_trunk_X_fr_RF_HAA>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_HAA();
        const Type_fr_trunk_X_fr_RF_HAA& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_HAA : public TransformForce<Scalar, Type_fr_trunk_X_fr_LH_HAA>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_HAA();
        const Type_fr_trunk_X_fr_LH_HAA& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_HAA : public TransformForce<Scalar, Type_fr_trunk_X_fr_RH_HAA>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_HAA();
        const Type_fr_trunk_X_fr_RH_HAA& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LF_HFE : public TransformForce<Scalar, Type_fr_trunk_X_fr_LF_HFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_HFE();
        const Type_fr_trunk_X_fr_LF_HFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_HFE : public TransformForce<Scalar, Type_fr_trunk_X_fr_RF_HFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_HFE();
        const Type_fr_trunk_X_fr_RF_HFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_HFE : public TransformForce<Scalar, Type_fr_trunk_X_fr_LH_HFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_HFE();
        const Type_fr_trunk_X_fr_LH_HFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_HFE : public TransformForce<Scalar, Type_fr_trunk_X_fr_RH_HFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_HFE();
        const Type_fr_trunk_X_fr_RH_HFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LF_KFE : public TransformForce<Scalar, Type_fr_trunk_X_fr_LF_KFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_KFE();
        const Type_fr_trunk_X_fr_LF_KFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_KFE : public TransformForce<Scalar, Type_fr_trunk_X_fr_RF_KFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_KFE();
        const Type_fr_trunk_X_fr_RF_KFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_KFE : public TransformForce<Scalar, Type_fr_trunk_X_fr_LH_KFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_KFE();
        const Type_fr_trunk_X_fr_LH_KFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_KFE : public TransformForce<Scalar, Type_fr_trunk_X_fr_RH_KFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_KFE();
        const Type_fr_trunk_X_fr_RH_KFE& update(const JState&);
    protected:
    };

    class Type_fr_LF_upperleg_X_fr_LF_hipassembly : public TransformForce<Scalar, Type_fr_LF_upperleg_X_fr_LF_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_upperleg_X_fr_LF_hipassembly();
        const Type_fr_LF_upperleg_X_fr_LF_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_LF_hipassembly_X_fr_LF_upperleg : public TransformForce<Scalar, Type_fr_LF_hipassembly_X_fr_LF_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_hipassembly_X_fr_LF_upperleg();
        const Type_fr_LF_hipassembly_X_fr_LF_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_LF_lowerleg_X_fr_LF_upperleg : public TransformForce<Scalar, Type_fr_LF_lowerleg_X_fr_LF_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_lowerleg_X_fr_LF_upperleg();
        const Type_fr_LF_lowerleg_X_fr_LF_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_LF_upperleg_X_fr_LF_lowerleg : public TransformForce<Scalar, Type_fr_LF_upperleg_X_fr_LF_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_upperleg_X_fr_LF_lowerleg();
        const Type_fr_LF_upperleg_X_fr_LF_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_RF_upperleg_X_fr_RF_hipassembly : public TransformForce<Scalar, Type_fr_RF_upperleg_X_fr_RF_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_upperleg_X_fr_RF_hipassembly();
        const Type_fr_RF_upperleg_X_fr_RF_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_RF_hipassembly_X_fr_RF_upperleg : public TransformForce<Scalar, Type_fr_RF_hipassembly_X_fr_RF_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_hipassembly_X_fr_RF_upperleg();
        const Type_fr_RF_hipassembly_X_fr_RF_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_RF_lowerleg_X_fr_RF_upperleg : public TransformForce<Scalar, Type_fr_RF_lowerleg_X_fr_RF_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_lowerleg_X_fr_RF_upperleg();
        const Type_fr_RF_lowerleg_X_fr_RF_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_RF_upperleg_X_fr_RF_lowerleg : public TransformForce<Scalar, Type_fr_RF_upperleg_X_fr_RF_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_upperleg_X_fr_RF_lowerleg();
        const Type_fr_RF_upperleg_X_fr_RF_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_LH_upperleg_X_fr_LH_hipassembly : public TransformForce<Scalar, Type_fr_LH_upperleg_X_fr_LH_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_upperleg_X_fr_LH_hipassembly();
        const Type_fr_LH_upperleg_X_fr_LH_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_LH_hipassembly_X_fr_LH_upperleg : public TransformForce<Scalar, Type_fr_LH_hipassembly_X_fr_LH_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_hipassembly_X_fr_LH_upperleg();
        const Type_fr_LH_hipassembly_X_fr_LH_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_LH_lowerleg_X_fr_LH_upperleg : public TransformForce<Scalar, Type_fr_LH_lowerleg_X_fr_LH_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_lowerleg_X_fr_LH_upperleg();
        const Type_fr_LH_lowerleg_X_fr_LH_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_LH_upperleg_X_fr_LH_lowerleg : public TransformForce<Scalar, Type_fr_LH_upperleg_X_fr_LH_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_upperleg_X_fr_LH_lowerleg();
        const Type_fr_LH_upperleg_X_fr_LH_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_RH_upperleg_X_fr_RH_hipassembly : public TransformForce<Scalar, Type_fr_RH_upperleg_X_fr_RH_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_upperleg_X_fr_RH_hipassembly();
        const Type_fr_RH_upperleg_X_fr_RH_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_RH_hipassembly_X_fr_RH_upperleg : public TransformForce<Scalar, Type_fr_RH_hipassembly_X_fr_RH_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_hipassembly_X_fr_RH_upperleg();
        const Type_fr_RH_hipassembly_X_fr_RH_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_RH_lowerleg_X_fr_RH_upperleg : public TransformForce<Scalar, Type_fr_RH_lowerleg_X_fr_RH_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_lowerleg_X_fr_RH_upperleg();
        const Type_fr_RH_lowerleg_X_fr_RH_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_RH_upperleg_X_fr_RH_lowerleg : public TransformForce<Scalar, Type_fr_RH_upperleg_X_fr_RH_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_upperleg_X_fr_RH_lowerleg();
        const Type_fr_RH_upperleg_X_fr_RH_lowerleg& update(const JState&);
    protected:
    };

public:
    ForceTransforms();
    void updateParameters();
    Type_fr_trunk_X_fr_LF_hipassembly fr_trunk_X_fr_LF_hipassembly;
    Type_fr_trunk_X_fr_RF_hipassembly fr_trunk_X_fr_RF_hipassembly;
    Type_fr_trunk_X_fr_LH_hipassembly fr_trunk_X_fr_LH_hipassembly;
    Type_fr_trunk_X_fr_RH_hipassembly fr_trunk_X_fr_RH_hipassembly;
    Type_fr_trunk_X_fr_LF_upperleg fr_trunk_X_fr_LF_upperleg;
    Type_fr_trunk_X_fr_RF_upperleg fr_trunk_X_fr_RF_upperleg;
    Type_fr_trunk_X_fr_LH_upperleg fr_trunk_X_fr_LH_upperleg;
    Type_fr_trunk_X_fr_RH_upperleg fr_trunk_X_fr_RH_upperleg;
    Type_fr_trunk_X_fr_LF_lowerleg fr_trunk_X_fr_LF_lowerleg;
    Type_fr_trunk_X_fr_RF_lowerleg fr_trunk_X_fr_RF_lowerleg;
    Type_fr_trunk_X_fr_LH_lowerleg fr_trunk_X_fr_LH_lowerleg;
    Type_fr_trunk_X_fr_RH_lowerleg fr_trunk_X_fr_RH_lowerleg;
    Type_fr_LF_hipassembly_X_fr_trunk fr_LF_hipassembly_X_fr_trunk;
    Type_fr_RF_hipassembly_X_fr_trunk fr_RF_hipassembly_X_fr_trunk;
    Type_fr_LH_hipassembly_X_fr_trunk fr_LH_hipassembly_X_fr_trunk;
    Type_fr_RH_hipassembly_X_fr_trunk fr_RH_hipassembly_X_fr_trunk;
    Type_fr_LF_upperleg_X_fr_trunk fr_LF_upperleg_X_fr_trunk;
    Type_fr_RF_upperleg_X_fr_trunk fr_RF_upperleg_X_fr_trunk;
    Type_fr_LH_upperleg_X_fr_trunk fr_LH_upperleg_X_fr_trunk;
    Type_fr_RH_upperleg_X_fr_trunk fr_RH_upperleg_X_fr_trunk;
    Type_fr_LF_lowerleg_X_fr_trunk fr_LF_lowerleg_X_fr_trunk;
    Type_fr_RF_lowerleg_X_fr_trunk fr_RF_lowerleg_X_fr_trunk;
    Type_fr_LH_lowerleg_X_fr_trunk fr_LH_lowerleg_X_fr_trunk;
    Type_fr_RH_lowerleg_X_fr_trunk fr_RH_lowerleg_X_fr_trunk;
    Type_fr_trunk_X_LF_hipassemblyCOM fr_trunk_X_LF_hipassemblyCOM;
    Type_fr_trunk_X_RF_hipassemblyCOM fr_trunk_X_RF_hipassemblyCOM;
    Type_fr_trunk_X_LH_hipassemblyCOM fr_trunk_X_LH_hipassemblyCOM;
    Type_fr_trunk_X_RH_hipassemblyCOM fr_trunk_X_RH_hipassemblyCOM;
    Type_fr_trunk_X_LF_upperlegCOM fr_trunk_X_LF_upperlegCOM;
    Type_fr_trunk_X_RF_upperlegCOM fr_trunk_X_RF_upperlegCOM;
    Type_fr_trunk_X_LH_upperlegCOM fr_trunk_X_LH_upperlegCOM;
    Type_fr_trunk_X_RH_upperlegCOM fr_trunk_X_RH_upperlegCOM;
    Type_fr_trunk_X_LF_lowerlegCOM fr_trunk_X_LF_lowerlegCOM;
    Type_fr_trunk_X_RF_lowerlegCOM fr_trunk_X_RF_lowerlegCOM;
    Type_fr_trunk_X_LH_lowerlegCOM fr_trunk_X_LH_lowerlegCOM;
    Type_fr_trunk_X_RH_lowerlegCOM fr_trunk_X_RH_lowerlegCOM;
    Type_fr_LF_foot_X_fr_LF_lowerleg fr_LF_foot_X_fr_LF_lowerleg;
    Type_fr_RF_foot_X_fr_RF_lowerleg fr_RF_foot_X_fr_RF_lowerleg;
    Type_fr_LH_foot_X_fr_LH_lowerleg fr_LH_foot_X_fr_LH_lowerleg;
    Type_fr_RH_foot_X_fr_RH_lowerleg fr_RH_foot_X_fr_RH_lowerleg;
    Type_fr_trunk_X_fr_LF_foot fr_trunk_X_fr_LF_foot;
    Type_fr_trunk_X_fr_RF_foot fr_trunk_X_fr_RF_foot;
    Type_fr_trunk_X_fr_LH_foot fr_trunk_X_fr_LH_foot;
    Type_fr_trunk_X_fr_RH_foot fr_trunk_X_fr_RH_foot;
    Type_fr_LF_foot_X_fr_trunk fr_LF_foot_X_fr_trunk;
    Type_fr_RF_foot_X_fr_trunk fr_RF_foot_X_fr_trunk;
    Type_fr_LH_foot_X_fr_trunk fr_LH_foot_X_fr_trunk;
    Type_fr_RH_foot_X_fr_trunk fr_RH_foot_X_fr_trunk;
    Type_fr_trunk_X_fr_LF_HAA fr_trunk_X_fr_LF_HAA;
    Type_fr_trunk_X_fr_RF_HAA fr_trunk_X_fr_RF_HAA;
    Type_fr_trunk_X_fr_LH_HAA fr_trunk_X_fr_LH_HAA;
    Type_fr_trunk_X_fr_RH_HAA fr_trunk_X_fr_RH_HAA;
    Type_fr_trunk_X_fr_LF_HFE fr_trunk_X_fr_LF_HFE;
    Type_fr_trunk_X_fr_RF_HFE fr_trunk_X_fr_RF_HFE;
    Type_fr_trunk_X_fr_LH_HFE fr_trunk_X_fr_LH_HFE;
    Type_fr_trunk_X_fr_RH_HFE fr_trunk_X_fr_RH_HFE;
    Type_fr_trunk_X_fr_LF_KFE fr_trunk_X_fr_LF_KFE;
    Type_fr_trunk_X_fr_RF_KFE fr_trunk_X_fr_RF_KFE;
    Type_fr_trunk_X_fr_LH_KFE fr_trunk_X_fr_LH_KFE;
    Type_fr_trunk_X_fr_RH_KFE fr_trunk_X_fr_RH_KFE;
    Type_fr_LF_upperleg_X_fr_LF_hipassembly fr_LF_upperleg_X_fr_LF_hipassembly;
    Type_fr_LF_hipassembly_X_fr_LF_upperleg fr_LF_hipassembly_X_fr_LF_upperleg;
    Type_fr_LF_lowerleg_X_fr_LF_upperleg fr_LF_lowerleg_X_fr_LF_upperleg;
    Type_fr_LF_upperleg_X_fr_LF_lowerleg fr_LF_upperleg_X_fr_LF_lowerleg;
    Type_fr_RF_upperleg_X_fr_RF_hipassembly fr_RF_upperleg_X_fr_RF_hipassembly;
    Type_fr_RF_hipassembly_X_fr_RF_upperleg fr_RF_hipassembly_X_fr_RF_upperleg;
    Type_fr_RF_lowerleg_X_fr_RF_upperleg fr_RF_lowerleg_X_fr_RF_upperleg;
    Type_fr_RF_upperleg_X_fr_RF_lowerleg fr_RF_upperleg_X_fr_RF_lowerleg;
    Type_fr_LH_upperleg_X_fr_LH_hipassembly fr_LH_upperleg_X_fr_LH_hipassembly;
    Type_fr_LH_hipassembly_X_fr_LH_upperleg fr_LH_hipassembly_X_fr_LH_upperleg;
    Type_fr_LH_lowerleg_X_fr_LH_upperleg fr_LH_lowerleg_X_fr_LH_upperleg;
    Type_fr_LH_upperleg_X_fr_LH_lowerleg fr_LH_upperleg_X_fr_LH_lowerleg;
    Type_fr_RH_upperleg_X_fr_RH_hipassembly fr_RH_upperleg_X_fr_RH_hipassembly;
    Type_fr_RH_hipassembly_X_fr_RH_upperleg fr_RH_hipassembly_X_fr_RH_upperleg;
    Type_fr_RH_lowerleg_X_fr_RH_upperleg fr_RH_lowerleg_X_fr_RH_upperleg;
    Type_fr_RH_upperleg_X_fr_RH_lowerleg fr_RH_upperleg_X_fr_RH_lowerleg;

protected:

}; //class 'ForceTransforms'

/**
 * The class with the homogeneous (4x4) coordinates transformation
 * matrices.
 */
template <typename TRAIT>
class HomogeneousTransforms {
public:
    EIGEN_MAKE_ALIGNED_OPERATOR_NEW
    typedef typename TRAIT::Scalar Scalar;

    typedef JointState<Scalar> JState;
    class Dummy {};
    typedef typename TransformHomogeneous<Scalar, Dummy>::MatrixType MatrixType;
public:
    class Type_fr_trunk_X_fr_LF_hipassembly : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_LF_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_hipassembly();
        const Type_fr_trunk_X_fr_LF_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_hipassembly : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_RF_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_hipassembly();
        const Type_fr_trunk_X_fr_RF_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_hipassembly : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_LH_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_hipassembly();
        const Type_fr_trunk_X_fr_LH_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_hipassembly : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_RH_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_hipassembly();
        const Type_fr_trunk_X_fr_RH_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LF_upperleg : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_LF_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_upperleg();
        const Type_fr_trunk_X_fr_LF_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_upperleg : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_RF_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_upperleg();
        const Type_fr_trunk_X_fr_RF_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_upperleg : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_LH_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_upperleg();
        const Type_fr_trunk_X_fr_LH_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_upperleg : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_RH_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_upperleg();
        const Type_fr_trunk_X_fr_RH_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LF_lowerleg : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_LF_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_lowerleg();
        const Type_fr_trunk_X_fr_LF_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_lowerleg : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_RF_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_lowerleg();
        const Type_fr_trunk_X_fr_RF_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_lowerleg : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_LH_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_lowerleg();
        const Type_fr_trunk_X_fr_LH_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_lowerleg : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_RH_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_lowerleg();
        const Type_fr_trunk_X_fr_RH_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_LF_hipassembly_X_fr_trunk : public TransformHomogeneous<Scalar, Type_fr_LF_hipassembly_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_hipassembly_X_fr_trunk();
        const Type_fr_LF_hipassembly_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RF_hipassembly_X_fr_trunk : public TransformHomogeneous<Scalar, Type_fr_RF_hipassembly_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_hipassembly_X_fr_trunk();
        const Type_fr_RF_hipassembly_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_LH_hipassembly_X_fr_trunk : public TransformHomogeneous<Scalar, Type_fr_LH_hipassembly_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_hipassembly_X_fr_trunk();
        const Type_fr_LH_hipassembly_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RH_hipassembly_X_fr_trunk : public TransformHomogeneous<Scalar, Type_fr_RH_hipassembly_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_hipassembly_X_fr_trunk();
        const Type_fr_RH_hipassembly_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_LF_upperleg_X_fr_trunk : public TransformHomogeneous<Scalar, Type_fr_LF_upperleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_upperleg_X_fr_trunk();
        const Type_fr_LF_upperleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RF_upperleg_X_fr_trunk : public TransformHomogeneous<Scalar, Type_fr_RF_upperleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_upperleg_X_fr_trunk();
        const Type_fr_RF_upperleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_LH_upperleg_X_fr_trunk : public TransformHomogeneous<Scalar, Type_fr_LH_upperleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_upperleg_X_fr_trunk();
        const Type_fr_LH_upperleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RH_upperleg_X_fr_trunk : public TransformHomogeneous<Scalar, Type_fr_RH_upperleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_upperleg_X_fr_trunk();
        const Type_fr_RH_upperleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_LF_lowerleg_X_fr_trunk : public TransformHomogeneous<Scalar, Type_fr_LF_lowerleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_lowerleg_X_fr_trunk();
        const Type_fr_LF_lowerleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RF_lowerleg_X_fr_trunk : public TransformHomogeneous<Scalar, Type_fr_RF_lowerleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_lowerleg_X_fr_trunk();
        const Type_fr_RF_lowerleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_LH_lowerleg_X_fr_trunk : public TransformHomogeneous<Scalar, Type_fr_LH_lowerleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_lowerleg_X_fr_trunk();
        const Type_fr_LH_lowerleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RH_lowerleg_X_fr_trunk : public TransformHomogeneous<Scalar, Type_fr_RH_lowerleg_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_lowerleg_X_fr_trunk();
        const Type_fr_RH_lowerleg_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_LF_hipassemblyCOM : public TransformHomogeneous<Scalar, Type_fr_trunk_X_LF_hipassemblyCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_LF_hipassemblyCOM();
        const Type_fr_trunk_X_LF_hipassemblyCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_RF_hipassemblyCOM : public TransformHomogeneous<Scalar, Type_fr_trunk_X_RF_hipassemblyCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_RF_hipassemblyCOM();
        const Type_fr_trunk_X_RF_hipassemblyCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_LH_hipassemblyCOM : public TransformHomogeneous<Scalar, Type_fr_trunk_X_LH_hipassemblyCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_LH_hipassemblyCOM();
        const Type_fr_trunk_X_LH_hipassemblyCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_RH_hipassemblyCOM : public TransformHomogeneous<Scalar, Type_fr_trunk_X_RH_hipassemblyCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_RH_hipassemblyCOM();
        const Type_fr_trunk_X_RH_hipassemblyCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_LF_upperlegCOM : public TransformHomogeneous<Scalar, Type_fr_trunk_X_LF_upperlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_LF_upperlegCOM();
        const Type_fr_trunk_X_LF_upperlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_RF_upperlegCOM : public TransformHomogeneous<Scalar, Type_fr_trunk_X_RF_upperlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_RF_upperlegCOM();
        const Type_fr_trunk_X_RF_upperlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_LH_upperlegCOM : public TransformHomogeneous<Scalar, Type_fr_trunk_X_LH_upperlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_LH_upperlegCOM();
        const Type_fr_trunk_X_LH_upperlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_RH_upperlegCOM : public TransformHomogeneous<Scalar, Type_fr_trunk_X_RH_upperlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_RH_upperlegCOM();
        const Type_fr_trunk_X_RH_upperlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_LF_lowerlegCOM : public TransformHomogeneous<Scalar, Type_fr_trunk_X_LF_lowerlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_LF_lowerlegCOM();
        const Type_fr_trunk_X_LF_lowerlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_RF_lowerlegCOM : public TransformHomogeneous<Scalar, Type_fr_trunk_X_RF_lowerlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_RF_lowerlegCOM();
        const Type_fr_trunk_X_RF_lowerlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_LH_lowerlegCOM : public TransformHomogeneous<Scalar, Type_fr_trunk_X_LH_lowerlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_LH_lowerlegCOM();
        const Type_fr_trunk_X_LH_lowerlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_RH_lowerlegCOM : public TransformHomogeneous<Scalar, Type_fr_trunk_X_RH_lowerlegCOM>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_RH_lowerlegCOM();
        const Type_fr_trunk_X_RH_lowerlegCOM& update(const JState&);
    protected:
    };

    class Type_fr_LF_foot_X_fr_LF_lowerleg : public TransformHomogeneous<Scalar, Type_fr_LF_foot_X_fr_LF_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_foot_X_fr_LF_lowerleg();
        const Type_fr_LF_foot_X_fr_LF_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_RF_foot_X_fr_RF_lowerleg : public TransformHomogeneous<Scalar, Type_fr_RF_foot_X_fr_RF_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_foot_X_fr_RF_lowerleg();
        const Type_fr_RF_foot_X_fr_RF_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_LH_foot_X_fr_LH_lowerleg : public TransformHomogeneous<Scalar, Type_fr_LH_foot_X_fr_LH_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_foot_X_fr_LH_lowerleg();
        const Type_fr_LH_foot_X_fr_LH_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_RH_foot_X_fr_RH_lowerleg : public TransformHomogeneous<Scalar, Type_fr_RH_foot_X_fr_RH_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_foot_X_fr_RH_lowerleg();
        const Type_fr_RH_foot_X_fr_RH_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LF_foot : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_LF_foot>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_foot();
        const Type_fr_trunk_X_fr_LF_foot& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_foot : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_RF_foot>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_foot();
        const Type_fr_trunk_X_fr_RF_foot& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_foot : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_LH_foot>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_foot();
        const Type_fr_trunk_X_fr_LH_foot& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_foot : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_RH_foot>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_foot();
        const Type_fr_trunk_X_fr_RH_foot& update(const JState&);
    protected:
    };

    class Type_fr_LF_foot_X_fr_trunk : public TransformHomogeneous<Scalar, Type_fr_LF_foot_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_foot_X_fr_trunk();
        const Type_fr_LF_foot_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RF_foot_X_fr_trunk : public TransformHomogeneous<Scalar, Type_fr_RF_foot_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_foot_X_fr_trunk();
        const Type_fr_RF_foot_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_LH_foot_X_fr_trunk : public TransformHomogeneous<Scalar, Type_fr_LH_foot_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_foot_X_fr_trunk();
        const Type_fr_LH_foot_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_RH_foot_X_fr_trunk : public TransformHomogeneous<Scalar, Type_fr_RH_foot_X_fr_trunk>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_foot_X_fr_trunk();
        const Type_fr_RH_foot_X_fr_trunk& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LF_HAA : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_LF_HAA>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_HAA();
        const Type_fr_trunk_X_fr_LF_HAA& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_HAA : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_RF_HAA>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_HAA();
        const Type_fr_trunk_X_fr_RF_HAA& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_HAA : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_LH_HAA>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_HAA();
        const Type_fr_trunk_X_fr_LH_HAA& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_HAA : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_RH_HAA>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_HAA();
        const Type_fr_trunk_X_fr_RH_HAA& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LF_HFE : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_LF_HFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_HFE();
        const Type_fr_trunk_X_fr_LF_HFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_HFE : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_RF_HFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_HFE();
        const Type_fr_trunk_X_fr_RF_HFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_HFE : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_LH_HFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_HFE();
        const Type_fr_trunk_X_fr_LH_HFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_HFE : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_RH_HFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_HFE();
        const Type_fr_trunk_X_fr_RH_HFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LF_KFE : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_LF_KFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LF_KFE();
        const Type_fr_trunk_X_fr_LF_KFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RF_KFE : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_RF_KFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RF_KFE();
        const Type_fr_trunk_X_fr_RF_KFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_LH_KFE : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_LH_KFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_LH_KFE();
        const Type_fr_trunk_X_fr_LH_KFE& update(const JState&);
    protected:
    };

    class Type_fr_trunk_X_fr_RH_KFE : public TransformHomogeneous<Scalar, Type_fr_trunk_X_fr_RH_KFE>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_trunk_X_fr_RH_KFE();
        const Type_fr_trunk_X_fr_RH_KFE& update(const JState&);
    protected:
    };

    class Type_fr_LF_upperleg_X_fr_LF_hipassembly : public TransformHomogeneous<Scalar, Type_fr_LF_upperleg_X_fr_LF_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_upperleg_X_fr_LF_hipassembly();
        const Type_fr_LF_upperleg_X_fr_LF_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_LF_hipassembly_X_fr_LF_upperleg : public TransformHomogeneous<Scalar, Type_fr_LF_hipassembly_X_fr_LF_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_hipassembly_X_fr_LF_upperleg();
        const Type_fr_LF_hipassembly_X_fr_LF_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_LF_lowerleg_X_fr_LF_upperleg : public TransformHomogeneous<Scalar, Type_fr_LF_lowerleg_X_fr_LF_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_lowerleg_X_fr_LF_upperleg();
        const Type_fr_LF_lowerleg_X_fr_LF_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_LF_upperleg_X_fr_LF_lowerleg : public TransformHomogeneous<Scalar, Type_fr_LF_upperleg_X_fr_LF_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LF_upperleg_X_fr_LF_lowerleg();
        const Type_fr_LF_upperleg_X_fr_LF_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_RF_upperleg_X_fr_RF_hipassembly : public TransformHomogeneous<Scalar, Type_fr_RF_upperleg_X_fr_RF_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_upperleg_X_fr_RF_hipassembly();
        const Type_fr_RF_upperleg_X_fr_RF_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_RF_hipassembly_X_fr_RF_upperleg : public TransformHomogeneous<Scalar, Type_fr_RF_hipassembly_X_fr_RF_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_hipassembly_X_fr_RF_upperleg();
        const Type_fr_RF_hipassembly_X_fr_RF_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_RF_lowerleg_X_fr_RF_upperleg : public TransformHomogeneous<Scalar, Type_fr_RF_lowerleg_X_fr_RF_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_lowerleg_X_fr_RF_upperleg();
        const Type_fr_RF_lowerleg_X_fr_RF_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_RF_upperleg_X_fr_RF_lowerleg : public TransformHomogeneous<Scalar, Type_fr_RF_upperleg_X_fr_RF_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RF_upperleg_X_fr_RF_lowerleg();
        const Type_fr_RF_upperleg_X_fr_RF_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_LH_upperleg_X_fr_LH_hipassembly : public TransformHomogeneous<Scalar, Type_fr_LH_upperleg_X_fr_LH_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_upperleg_X_fr_LH_hipassembly();
        const Type_fr_LH_upperleg_X_fr_LH_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_LH_hipassembly_X_fr_LH_upperleg : public TransformHomogeneous<Scalar, Type_fr_LH_hipassembly_X_fr_LH_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_hipassembly_X_fr_LH_upperleg();
        const Type_fr_LH_hipassembly_X_fr_LH_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_LH_lowerleg_X_fr_LH_upperleg : public TransformHomogeneous<Scalar, Type_fr_LH_lowerleg_X_fr_LH_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_lowerleg_X_fr_LH_upperleg();
        const Type_fr_LH_lowerleg_X_fr_LH_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_LH_upperleg_X_fr_LH_lowerleg : public TransformHomogeneous<Scalar, Type_fr_LH_upperleg_X_fr_LH_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_LH_upperleg_X_fr_LH_lowerleg();
        const Type_fr_LH_upperleg_X_fr_LH_lowerleg& update(const JState&);
    protected:
    };

    class Type_fr_RH_upperleg_X_fr_RH_hipassembly : public TransformHomogeneous<Scalar, Type_fr_RH_upperleg_X_fr_RH_hipassembly>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_upperleg_X_fr_RH_hipassembly();
        const Type_fr_RH_upperleg_X_fr_RH_hipassembly& update(const JState&);
    protected:
    };

    class Type_fr_RH_hipassembly_X_fr_RH_upperleg : public TransformHomogeneous<Scalar, Type_fr_RH_hipassembly_X_fr_RH_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_hipassembly_X_fr_RH_upperleg();
        const Type_fr_RH_hipassembly_X_fr_RH_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_RH_lowerleg_X_fr_RH_upperleg : public TransformHomogeneous<Scalar, Type_fr_RH_lowerleg_X_fr_RH_upperleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_lowerleg_X_fr_RH_upperleg();
        const Type_fr_RH_lowerleg_X_fr_RH_upperleg& update(const JState&);
    protected:
    };

    class Type_fr_RH_upperleg_X_fr_RH_lowerleg : public TransformHomogeneous<Scalar, Type_fr_RH_upperleg_X_fr_RH_lowerleg>
    {
    public:
        EIGEN_MAKE_ALIGNED_OPERATOR_NEW
        Type_fr_RH_upperleg_X_fr_RH_lowerleg();
        const Type_fr_RH_upperleg_X_fr_RH_lowerleg& update(const JState&);
    protected:
    };

public:
    HomogeneousTransforms();
    void updateParameters();
    Type_fr_trunk_X_fr_LF_hipassembly fr_trunk_X_fr_LF_hipassembly;
    Type_fr_trunk_X_fr_RF_hipassembly fr_trunk_X_fr_RF_hipassembly;
    Type_fr_trunk_X_fr_LH_hipassembly fr_trunk_X_fr_LH_hipassembly;
    Type_fr_trunk_X_fr_RH_hipassembly fr_trunk_X_fr_RH_hipassembly;
    Type_fr_trunk_X_fr_LF_upperleg fr_trunk_X_fr_LF_upperleg;
    Type_fr_trunk_X_fr_RF_upperleg fr_trunk_X_fr_RF_upperleg;
    Type_fr_trunk_X_fr_LH_upperleg fr_trunk_X_fr_LH_upperleg;
    Type_fr_trunk_X_fr_RH_upperleg fr_trunk_X_fr_RH_upperleg;
    Type_fr_trunk_X_fr_LF_lowerleg fr_trunk_X_fr_LF_lowerleg;
    Type_fr_trunk_X_fr_RF_lowerleg fr_trunk_X_fr_RF_lowerleg;
    Type_fr_trunk_X_fr_LH_lowerleg fr_trunk_X_fr_LH_lowerleg;
    Type_fr_trunk_X_fr_RH_lowerleg fr_trunk_X_fr_RH_lowerleg;
    Type_fr_LF_hipassembly_X_fr_trunk fr_LF_hipassembly_X_fr_trunk;
    Type_fr_RF_hipassembly_X_fr_trunk fr_RF_hipassembly_X_fr_trunk;
    Type_fr_LH_hipassembly_X_fr_trunk fr_LH_hipassembly_X_fr_trunk;
    Type_fr_RH_hipassembly_X_fr_trunk fr_RH_hipassembly_X_fr_trunk;
    Type_fr_LF_upperleg_X_fr_trunk fr_LF_upperleg_X_fr_trunk;
    Type_fr_RF_upperleg_X_fr_trunk fr_RF_upperleg_X_fr_trunk;
    Type_fr_LH_upperleg_X_fr_trunk fr_LH_upperleg_X_fr_trunk;
    Type_fr_RH_upperleg_X_fr_trunk fr_RH_upperleg_X_fr_trunk;
    Type_fr_LF_lowerleg_X_fr_trunk fr_LF_lowerleg_X_fr_trunk;
    Type_fr_RF_lowerleg_X_fr_trunk fr_RF_lowerleg_X_fr_trunk;
    Type_fr_LH_lowerleg_X_fr_trunk fr_LH_lowerleg_X_fr_trunk;
    Type_fr_RH_lowerleg_X_fr_trunk fr_RH_lowerleg_X_fr_trunk;
    Type_fr_trunk_X_LF_hipassemblyCOM fr_trunk_X_LF_hipassemblyCOM;
    Type_fr_trunk_X_RF_hipassemblyCOM fr_trunk_X_RF_hipassemblyCOM;
    Type_fr_trunk_X_LH_hipassemblyCOM fr_trunk_X_LH_hipassemblyCOM;
    Type_fr_trunk_X_RH_hipassemblyCOM fr_trunk_X_RH_hipassemblyCOM;
    Type_fr_trunk_X_LF_upperlegCOM fr_trunk_X_LF_upperlegCOM;
    Type_fr_trunk_X_RF_upperlegCOM fr_trunk_X_RF_upperlegCOM;
    Type_fr_trunk_X_LH_upperlegCOM fr_trunk_X_LH_upperlegCOM;
    Type_fr_trunk_X_RH_upperlegCOM fr_trunk_X_RH_upperlegCOM;
    Type_fr_trunk_X_LF_lowerlegCOM fr_trunk_X_LF_lowerlegCOM;
    Type_fr_trunk_X_RF_lowerlegCOM fr_trunk_X_RF_lowerlegCOM;
    Type_fr_trunk_X_LH_lowerlegCOM fr_trunk_X_LH_lowerlegCOM;
    Type_fr_trunk_X_RH_lowerlegCOM fr_trunk_X_RH_lowerlegCOM;
    Type_fr_LF_foot_X_fr_LF_lowerleg fr_LF_foot_X_fr_LF_lowerleg;
    Type_fr_RF_foot_X_fr_RF_lowerleg fr_RF_foot_X_fr_RF_lowerleg;
    Type_fr_LH_foot_X_fr_LH_lowerleg fr_LH_foot_X_fr_LH_lowerleg;
    Type_fr_RH_foot_X_fr_RH_lowerleg fr_RH_foot_X_fr_RH_lowerleg;
    Type_fr_trunk_X_fr_LF_foot fr_trunk_X_fr_LF_foot;
    Type_fr_trunk_X_fr_RF_foot fr_trunk_X_fr_RF_foot;
    Type_fr_trunk_X_fr_LH_foot fr_trunk_X_fr_LH_foot;
    Type_fr_trunk_X_fr_RH_foot fr_trunk_X_fr_RH_foot;
    Type_fr_LF_foot_X_fr_trunk fr_LF_foot_X_fr_trunk;
    Type_fr_RF_foot_X_fr_trunk fr_RF_foot_X_fr_trunk;
    Type_fr_LH_foot_X_fr_trunk fr_LH_foot_X_fr_trunk;
    Type_fr_RH_foot_X_fr_trunk fr_RH_foot_X_fr_trunk;
    Type_fr_trunk_X_fr_LF_HAA fr_trunk_X_fr_LF_HAA;
    Type_fr_trunk_X_fr_RF_HAA fr_trunk_X_fr_RF_HAA;
    Type_fr_trunk_X_fr_LH_HAA fr_trunk_X_fr_LH_HAA;
    Type_fr_trunk_X_fr_RH_HAA fr_trunk_X_fr_RH_HAA;
    Type_fr_trunk_X_fr_LF_HFE fr_trunk_X_fr_LF_HFE;
    Type_fr_trunk_X_fr_RF_HFE fr_trunk_X_fr_RF_HFE;
    Type_fr_trunk_X_fr_LH_HFE fr_trunk_X_fr_LH_HFE;
    Type_fr_trunk_X_fr_RH_HFE fr_trunk_X_fr_RH_HFE;
    Type_fr_trunk_X_fr_LF_KFE fr_trunk_X_fr_LF_KFE;
    Type_fr_trunk_X_fr_RF_KFE fr_trunk_X_fr_RF_KFE;
    Type_fr_trunk_X_fr_LH_KFE fr_trunk_X_fr_LH_KFE;
    Type_fr_trunk_X_fr_RH_KFE fr_trunk_X_fr_RH_KFE;
    Type_fr_LF_upperleg_X_fr_LF_hipassembly fr_LF_upperleg_X_fr_LF_hipassembly;
    Type_fr_LF_hipassembly_X_fr_LF_upperleg fr_LF_hipassembly_X_fr_LF_upperleg;
    Type_fr_LF_lowerleg_X_fr_LF_upperleg fr_LF_lowerleg_X_fr_LF_upperleg;
    Type_fr_LF_upperleg_X_fr_LF_lowerleg fr_LF_upperleg_X_fr_LF_lowerleg;
    Type_fr_RF_upperleg_X_fr_RF_hipassembly fr_RF_upperleg_X_fr_RF_hipassembly;
    Type_fr_RF_hipassembly_X_fr_RF_upperleg fr_RF_hipassembly_X_fr_RF_upperleg;
    Type_fr_RF_lowerleg_X_fr_RF_upperleg fr_RF_lowerleg_X_fr_RF_upperleg;
    Type_fr_RF_upperleg_X_fr_RF_lowerleg fr_RF_upperleg_X_fr_RF_lowerleg;
    Type_fr_LH_upperleg_X_fr_LH_hipassembly fr_LH_upperleg_X_fr_LH_hipassembly;
    Type_fr_LH_hipassembly_X_fr_LH_upperleg fr_LH_hipassembly_X_fr_LH_upperleg;
    Type_fr_LH_lowerleg_X_fr_LH_upperleg fr_LH_lowerleg_X_fr_LH_upperleg;
    Type_fr_LH_upperleg_X_fr_LH_lowerleg fr_LH_upperleg_X_fr_LH_lowerleg;
    Type_fr_RH_upperleg_X_fr_RH_hipassembly fr_RH_upperleg_X_fr_RH_hipassembly;
    Type_fr_RH_hipassembly_X_fr_RH_upperleg fr_RH_hipassembly_X_fr_RH_upperleg;
    Type_fr_RH_lowerleg_X_fr_RH_upperleg fr_RH_lowerleg_X_fr_RH_upperleg;
    Type_fr_RH_upperleg_X_fr_RH_lowerleg fr_RH_upperleg_X_fr_RH_lowerleg;

protected:

}; //class 'HomogeneousTransforms'

}

using MotionTransforms = tpl::MotionTransforms<rbd::DoubleTrait>;
using ForceTransforms = tpl::ForceTransforms<rbd::DoubleTrait>;
using HomogeneousTransforms = tpl::HomogeneousTransforms<rbd::DoubleTrait>;

}
}

#include "transforms.impl.h"

#endif

{'repo_name': 'ethz-adrl/control-toolbox', 'stars': '363', 'repo_language': 'C++', 'file_name': 'ct_modelsConfig.cmake', 'mime_type': 'text/plain', 'hash': 3944417581272901516, 'source_dataset': 'data'}


/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.lucene.store;

import java.io.IOException;
import java.nio.file.AccessDeniedException;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.FileTime;

/**
 *
Implements {@link LockFactory} using {@link
 * Files#createFile}.

 *
 *
The main downside with using this API for locking is
 * that the Lucene write lock may not be released when
 * the JVM exits abnormally.

 *
 *
When this happens, an {@link LockObtainFailedException}
 * is hit when trying to create a writer, in which case you may
 * need to explicitly clear the lock file first by
 * manually removing the file.  But, first be certain that
 * no writer is in fact writing to the index otherwise you
 * can easily corrupt your index.

 *
 *
Special care needs to be taken if you change the locking
 * implementation: First be certain that no writer is in fact
 * writing to the index otherwise you can easily corrupt
 * your index. Be sure to do the LockFactory change all Lucene
 * instances and clean up all leftover lock files before starting
 * the new configuration for the first time. Different implementations
 * can not work together!

 *
 *
If you suspect that this or any other LockFactory is
 * not working properly in your environment, you can easily
 * test it by using {@link VerifyingLockFactory}, {@link
 * LockVerifyServer} and {@link LockStressTest}.

 *
 *
This is a singleton, you have to use {@link #INSTANCE}.
 *
 * @see LockFactory
 */

public final class SimpleFSLockFactory extends FSLockFactory {

  /**
   * Singleton instance
   */
  public static final SimpleFSLockFactory INSTANCE = new SimpleFSLockFactory();

  private SimpleFSLockFactory() {}

  @Override
  protected Lock obtainFSLock(FSDirectory dir, String lockName) throws IOException {
    Path lockDir = dir.getDirectory();

    // Ensure that lockDir exists and is a directory.
    // note: this will fail if lockDir is a symlink
    Files.createDirectories(lockDir);

    Path lockFile = lockDir.resolve(lockName);

    // create the file: this will fail if it already exists
    try {
      Files.createFile(lockFile);
    } catch (FileAlreadyExistsException | AccessDeniedException e) {
      // convert optional specific exception to our optional specific exception
      throw new LockObtainFailedException("Lock held elsewhere: " + lockFile, e);
    }

    // used as a best-effort check, to see if the underlying file has changed
    final FileTime creationTime = Files.readAttributes(lockFile, BasicFileAttributes.class).creationTime();

    return new SimpleFSLock(lockFile, creationTime);
  }

  static final class SimpleFSLock extends Lock {
    private final Path path;
    private final FileTime creationTime;
    private volatile boolean closed;

    SimpleFSLock(Path path, FileTime creationTime) throws IOException {
      this.path = path;
      this.creationTime = creationTime;
    }

    @Override
    public void ensureValid() throws IOException {
      if (closed) {
        throw new AlreadyClosedException("Lock instance already released: " + this);
      }
      // try to validate the backing file name, that it still exists,
      // and has the same creation time as when we obtained the lock.
      // if it differs, someone deleted our lock file (and we are ineffective)
      FileTime ctime = Files.readAttributes(path, BasicFileAttributes.class).creationTime();
      if (!creationTime.equals(ctime)) {
        throw new AlreadyClosedException("Underlying file changed by an external force at " + ctime + ", (lock=" + this + ")");
      }
    }

    @Override
    public synchronized void close() throws IOException {
      if (closed) {
        return;
      }
      try {
        // NOTE: unlike NativeFSLockFactory, we can potentially delete someone else's
        // lock if things have gone wrong. we do best-effort check (ensureValid) to
        // avoid doing this.
        try {
          ensureValid();
        } catch (Throwable exc) {
          // notify the user they may need to intervene.
          throw new LockReleaseFailedException("Lock file cannot be safely removed. Manual intervention is recommended.", exc);
        }
        // we did a best effort check, now try to remove the file. if something goes wrong,
        // we need to make it clear to the user that the directory may still remain locked.
        try {
          Files.delete(path);
        } catch (Throwable exc) {
          throw new LockReleaseFailedException("Unable to remove lock file. Manual intervention is recommended", exc);
        }
      } finally {
        closed = true;
      }
    }

    @Override
    public String toString() {
      return "SimpleFSLock(path=" + path + ",creationTime=" + creationTime + ")";
    }
  }
}

{'repo_name': 'apache/lucene-solr', 'stars': '3625', 'repo_language': 'Java', 'file_name': 'addBackcompatIndexes.py', 'mime_type': 'text/x-python', 'hash': -4434051229830547989, 'source_dataset': 'data'}


import * as Select from '../select/index';
import { SelectQuery, IError } from '../../../common/index';
import { Base } from '../base';

export class Union extends Base {
    execute(query: SelectQuery[], onSuccess: (results: object[]) => void, onError: (err: IError) => void) {
        let index = 0;
        const hashMap = {};
        let isQueryForSameTable = true;
        const queryLength = query.length;
        query.every((qry, i) => {
            if (i + 1 < queryLength && qry.from !== query[i + 1].from) {
                isQueryForSameTable = false;
                return false;
            }
            return true;
        });
        let getHashKey;
        if (isQueryForSameTable) {
            const pKey = this.getPrimaryKey(query[0].from);
            getHashKey = (val) => {
                return val[pKey];
            };
        }
        else {
            getHashKey = (val) => {
                let columnValKey = "";
                for (const key in val) {
                    columnValKey += val[key];
                }
                return columnValKey;
            };
        }

        const fetchData = () => {
            if (index < query.length) {
                new Select.Instance(query[index++], (selectResult) => {
                    selectResult.forEach(val => {
                        hashMap[getHashKey(val)] = val;
                    });
                    fetchData();
                }, onError).execute();
            }
            else {
                const results = [];
                for (const key in hashMap) {
                    results.push(hashMap[key]);
                }
                onSuccess(results);
            }
        };
        fetchData();
    }

}

{'repo_name': 'ujjwalguptaofficial/JsStore', 'stars': '352', 'repo_language': 'JavaScript', 'file_name': 'webpack.dev.config.js', 'mime_type': 'text/plain', 'hash': 2308110050230984890, 'source_dataset': 'data'}