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