[38ba34]: / Body / AAUHuman / Trunk / JointsLumbar.any

Download this file

209 lines (175 with data), 6.7 kB

/**
Definitions of the Joints in the lumbar spine. From PelvisL5 to T12L1
*/
AnyFolder JointsLumbar = {
  
  
  AnySphericalJoint SacrumPelvisJnt = {
    AnyRefNode &PelvisNode = ..SegmentsLumbar.PelvisSeg.PelvisSacrumJntNode;
    AnyRefNode &SacrumNode = ..SegmentsLumbar.SacrumSeg.SacrumPelvisJntNode;
    
  };
  //There are no muscles attached to sacrum 
  AnyReacForce SacrumPelvisReaction = {
    AnySphericalJoint &ref=.SacrumPelvisJnt ;
  };
  
  AnySphericalJoint L5SacrumJnt = {
    AnyRefNode &SacrumNode = ..SegmentsLumbar.SacrumSeg.SacrumL5JntNode;
    AnyRefNode &L5Node = ..SegmentsLumbar.L5Seg.L5SacrumJntNode;
    //Joint reaction force transformed to the rotated reference node aligned with the vertebral body. 
    AnyForceMomentMeasure2 ReactionForceRotated = {
      RefPoint = &.SacrumNode.RotNode;
      IncludeForces = {&.Constraints.Reaction};
      IncludeSegments = {&...SegmentsLumbar.SacrumSeg};
      AnyFloat Flocal = -F * .SacrumNode.RotNode.Axes;
    };
  };  
  
  AnySphericalJoint L4L5Jnt = {
    AnyRefNode &L5Node = ..SegmentsLumbar.L5Seg.L4L5JntNode;
    AnyRefNode &L4Node = ..SegmentsLumbar.L4Seg.L4L5JntNode;
    //Joint reaction force transformed to the rotated reference node aligned with the vertebral body. 
    AnyForceMomentMeasure2 ReactionForceRotated = {
      RefPoint = &.L5Node.RotNode;
      IncludeForces = {&.Constraints.Reaction};
      IncludeSegments = {&...SegmentsLumbar.L5Seg};
      AnyFloat Flocal = -F * .L5Node.RotNode.Axes;
    };
  };
  
  AnySphericalJoint L3L4Jnt = {
    AnyRefNode &L4Node = ..SegmentsLumbar.L4Seg.L3L4JntNode;
    AnyRefNode &L3Node = ..SegmentsLumbar.L3Seg.L3L4JntNode;
    //Joint reaction force transformed to the rotated reference node aligned with the vertebral body. 
    AnyForceMomentMeasure2 ReactionForceRotated = {
      RefPoint = &.L4Node.RotNode;
      IncludeForces = {&.Constraints.Reaction};
      IncludeSegments = {&...SegmentsLumbar.L4Seg};
      AnyFloat Flocal = -F * .L4Node.RotNode.Axes;
    };
  };
  
  AnySphericalJoint L2L3Jnt = {
    AnyRefNode &L3Node = ..SegmentsLumbar.L3Seg.L2L3JntNode;
    AnyRefNode &L2Node = ..SegmentsLumbar.L2Seg.L2L3JntNode;
    //Joint reaction force transformed to the rotated reference node aligned with the vertebral body. 
    AnyForceMomentMeasure2 ReactionForceRotated = {
      RefPoint = &.L3Node.RotNode;
      IncludeForces = {&.Constraints.Reaction};
      IncludeSegments = {&...SegmentsLumbar.L3Seg};
      AnyFloat Flocal = -F * .L3Node.RotNode.Axes;
    };
  };
  
  AnySphericalJoint L1L2Jnt = {
    AnyRefNode &L2Node = ..SegmentsLumbar.L2Seg.L1L2JntNode;
    AnyRefNode &L1Node = ..SegmentsLumbar.L1Seg.L1L2JntNode;
    //Joint reaction force transformed to the rotated reference node aligned with the vertebral body. 
    AnyForceMomentMeasure2 ReactionForceRotated = {
      RefPoint = &.L2Node.RotNode;
      IncludeForces = {&.Constraints.Reaction};
      IncludeSegments = {&...SegmentsLumbar.L2Seg};
      AnyFloat Flocal = -F * .L2Node.RotNode.Axes;
    };
  };
  
  AnySphericalJoint T12L1Jnt = {
    AnyRefNode &L1Node = ..SegmentsLumbar.L1Seg.T12L1JntNode;
    AnyRefNode &T12Node = ..SegmentsThorax.T12Seg.T12L1JntNode;
      //Joint reaction force transformed to the rotated reference node aligned with the vertebral body. 
    AnyForceMomentMeasure2 ReactionForceRotated = {
      RefPoint = &.L1Node.RotNode;
      IncludeForces = {&.Constraints.Reaction};
      IncludeSegments = {&...SegmentsLumbar.L1Seg};
      AnyFloat Flocal = -F * .L1Node.RotNode.Axes;
    };
  };
  
  #if BM_TRUNK_LUMBAR_RHYTHM != OFF
  
  //Spine rhythm leaves three rotational dof between pelvis and thorax free 
  
  RhythmDriverLinear SpineRhythmDrvFlexion(RELATIVE_TO_DOF=6, _REDEFINE_VARIABLES=On) = {
     
     AnyVector RhythmCoefficients ??=
     {
       7.105616e-002,
       2.276759e-001,
       4.020500e-001,
       5.784718e-001,
       7.462112e-001,
       9.131695e-001,
       1
     };
     
     Measures.Input = 
    {
      AnyJoint &u1 = ...SacrumPelvisJnt;
      AnyJoint &u2 = ...L5SacrumJnt;
      AnyJoint &u3 = ...L4L5Jnt;
      AnyJoint &u4 = ...L3L4Jnt;
      AnyJoint &u5 = ...L2L3Jnt;
      AnyJoint &u6 = ...L1L2Jnt;
      AnyJoint &u7 = ...T12L1Jnt;
      MeasureOrganizer = {2, 5, 8, 11, 14, 17, 20};
    };
    
    #if BM_TRUNK_LUMBAR_RHYTHM == _RHYTHM_SOFT_
    CType = repmat(nDim, Soft);
    #endif

  };
  
  RhythmDriverLinear SpineRhythmDrvRotation(RELATIVE_TO_DOF=6, _REDEFINE_VARIABLES=On) = {
     
     AnyVector RhythmCoefficients ??= 
     {
       0,
       1.421123e-001,
       3.132395e-001,
       4.908604e-001,
       6.660833e-001,
       8.263391e-001,
       1
     };
     
     Measures.Input = 
    {
      AnyJoint &u1 = ...SacrumPelvisJnt;
      AnyJoint &u2 = ...L5SacrumJnt;
      AnyJoint &u3 = ...L4L5Jnt;
      AnyJoint &u4 = ...L3L4Jnt;
      AnyJoint &u5 = ...L2L3Jnt;
      AnyJoint &u6 = ...L1L2Jnt;
      AnyJoint &u7 = ...T12L1Jnt;
      MeasureOrganizer = {1, 4, 7, 10, 13, 16, 19};

    };
    
    #if BM_TRUNK_LUMBAR_RHYTHM == _RHYTHM_SOFT_
    CType = repmat(nDim, Soft);
    #endif

  };

  RhythmDriverLinear SpineRhythmDrvLatBending(RELATIVE_TO_DOF=6, _REDEFINE_VARIABLES=On) = {
     
     AnyVector RhythmCoefficients ??= 
     {
       7.105616e-002,
       2.276759e-001,
       4.020500e-001,
       5.784718e-001,
       7.462112e-001,
       9.131695e-001,
       1
     };
     
    Measures.Input = 
    {
      AnyJoint &u1 = ...SacrumPelvisJnt;
      AnyJoint &u2 = ...L5SacrumJnt;
      AnyJoint &u3 = ...L4L5Jnt;
      AnyJoint &u4 = ...L3L4Jnt;
      AnyJoint &u5 = ...L2L3Jnt;
      AnyJoint &u6 = ...L1L2Jnt;
      AnyJoint &u7 = ...T12L1Jnt;
      MeasureOrganizer = {0, 3, 6, 9, 12, 15, 18};
    };
    
    #if BM_TRUNK_LUMBAR_RHYTHM == _RHYTHM_SOFT_
    CType = repmat(nDim, Soft);
    #endif

  };
  
  #endif

  //Rotational measure between throax and pelvis
  AnyKinRotational PelvisThoraxRotMeasure = {
    AnyRefFrame &Pelvis = ..SegmentsLumbar.PelvisSeg.AnatomicalFrameTrunk;
    AnyRefFrame &Thorax = ..SegmentsThorax.T12Seg.AnatomicalFrameTrunk;  
    Type = RotVector;
  };  
   
  
   //Rotational measure between throax and pelvis
   AnyKinRotational PelvisT12RotMeasure = {
    AnyRefFrame &Pelvis = ..SegmentsLumbar.PelvisSeg.AnatomicalFrameTrunk;
    AnyRefFrame &Thorax = ..SegmentsThorax.T12Seg.AnatomicalFrameTrunk;  
    Type = RotVector;
    Axis1 = x;
    Axis2 = y;
    Axis3 = z;
  };    
};// End of JointsLumbar