Switch to side-by-side view

--- a
+++ b/Body/AAUHuman/Trunk/JointsLumbar.any
@@ -0,0 +1,208 @@
+/**
+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
+
+