Individual vertebral bodies for Thoracic spine

Hello

In my Master Thesis I analyze the influence of Kyphosis on Spinal loading. For this I need the thoracic spine with individual vertebral bodies to be able to changing the kyphosis curvature. I have already defined the vertebral bodies of the thoracic spine and began to move the insertion/origin Muscle nodes to the new thoracic vertebral bodies.

Now I have some questions about the muscles, which are connected to the shoulder-arm complex:

  1. In the file - AddOnOutSideBlockForMuscles.any- : In ThoraxSegRef all nodes are rotated and back rotated for the scaling because they are in another coordinate system. In the LSegRef, CSegRef, SkullSegRef and PelvisSegRef there is no rotation, why?

  2. In order to create the thoracic Segments (TSegRef) in this file, do I have to copy the whole stuff from the ThoraxSegRef to rotate the nodes in the individual TSegRef (ARel)? Should I do this also for the LSegRef, CSegRef, SkullSegRef and PelvisSegRef?

I hope my questions are clear enough.

Thanks for your help

Gregor

Hi Gregor,

Question 1: This is done because the positions of these nodes and other thorax-related nodes came from different sources. In order to preserve the understanding of model creation this transform was kept. Purely historical reasons.

Question 2: No, it can be done similarly to other spine parts by defining relative positions to the individual segment reference frame. And you do not need to modify lumbar or cervical nodes. All you have to do is to change the origin/insertion references in the muscles related to the thoracic spine.

I hope this answers your questions.

Best regards,
Pavel

Hello

Thank you for your advice, I could create the thoracic segments with the origin/insertion references in the muscles related to the thoracic spine.

Now I have a warning during loading:

Model Warning: Study ‘Main.Studies.InverseDynamicStudy’ contains too few kinematic constraints to be kinematically determinate.

Until now I did not add new muscle to the thoracic spine. I just added - AnyReacForce- for each new joint. Is this correct or is this the cause of the warning.

The aim is to measure forces and Moments between the Thoracic vertebral bodies, is this possible with - AnyReacForce - in the joints?

Thank you for your answer.

Gregor

Hi Gregor,

Q1: this warning says that you will have to define a motion of newly added segments. Introducing them added some additional degrees of freedom to the system that are not controlled kinematically. In your case you will have to describe the particular kyphosis by providing [th1th2, th2th3, …, th11th12] angles and their dynamics to drive the model. Alternatively it can be driven using MoCap (motion capture) data - please refer to the manual and tutorials to do so.

Q2: Yes, it is possible. Please take a look at how the following entities are defined in the Standing Model of the repository - I think you need exactly the same thing:
Main.Study.Output.Model.HumanModel.SelectedOutput.Trunk.JointReactionForce
Main.Study.Output.Model.HumanModel.SelectedOutput.Trunk.JointMomentMeasure

Best regards,
Pavel

Hello

My Model has now Reactions (AnyReacForce) between the vertebral bodies of the Thoracic and the cervical Spine. And the Model is MoCap driven. The Model is based on the GaitFullBody Model.

Moreover I implemented a spine Rhythm and Driver {0,0,0} for the Thoracic and the Cervical Spine. Even so I have too few independent constraints when I run „RunMotionAndParameterOptimizationSequence“ (829 independent constraints and 835 unknowns). When I take out these two drivers I have 826 independent constraints and 829 unknowns. When I take out just one of these Drivers I have 829 independent constraints and 832 unknowns. For the Lumbar spine I didn’t define a Driver because this spine should move according the markers.

I added all JointReactionForces and JointMomentMeasure of the thoracic and the cervical spine. I added also the JointMuscles for this two spine sections. The whole old thorax segment I fixed to the L1 Segment with Reaction in the articulation (AnyReacForce). This is just a first approach, when this model runs I will fix the thorax- ribs segment to the thoracic vertebral bodies.

Given that there are more degrees of freedom with the new segment, I tried to put the markers C7 and T10 on the old thorax-Ribs Segment and on the individual vertebral bodies (ModelSetup.any):

CreateMarker T10 (
MarkerName=Subject_58_T10,

MarkerPlacement=Trunk.SegmentsThorax.T10Seg,
MarkerPlacement=Trunk.SegmentsThorax.ThoraxSeg,

OptX=“Off”,OptY=“Off”,OptZ=“Off”,
WeightX=1.0,WeightY=1.0,WeightZ=1.0,
Model1=MotionAndParameterOptimizationModel,Model2= InverseDynamicModel
) = {sRelOpt = {-0.052,0.187,0}; };

Is this the right way to do this? There was no warning or error, but I don’t know if it works like this because it did not changed anything with the independent constraints.

I hope you can give me an idea how to get enough independent constraints.

Thank you for your answer
Best regards
Gregor

Hello Gregor,

Our suggestions is to simplify the model so you know what are the degrees of freedom you are working with. Inequality of the constraints and unknowns is an indication that some joints are not driven and need to be provided with a driver/constraint (purely the problem of kinematics). Please try to isolate the newly developed components and use appropriate drivers. Please refer to the FreePosture model of the repository and try to make it work first. Once that works it will be much easier to use and understand MoCap data driven modelling.

Secondly it is not very clear what you mean by saying “implemented a spine rhythm” - could you please elaborate this sentence a little? Also it looks strange that you duplicate thoracic spine, i.e. old-new are both present in your model. This is not correct. Similarly you should not provide two reference frames to the marker - we will try to figure out why there was no warning.

Best regards,
Pavel

Hello Pavel

Before I created the new Thoracic vertebral bodies I have already driven the model with MoCap data. And it worked without difficulty. In this case do you still think it is better to take the FreePosture model?

Implementing a spine rhythm: I made a spinerhythmdriver for the thoracic spine according the lumbar spine in the Joint Folder with a SRMatrix (36x39). I just put minus one on the diagonal and ones for the other numeric (according the lumbar SRMatrix).

My basic idea is to keep the thorax Segment which is now representing just the ribcage, so I can keep all the muscle nodes which are attached to the ribs. So I have the new thoracic Segments T1-T12 and the old thoracic Segment which is now the ribcage. For the old Thoracic Segment I just took out the joint to the skull and renamed the joint to L1. Moreover I will adapt the weight and the center of gravity. And I will export the ThoraxSeg.anysurf file to fragment it in a CAD system. This is the reason why I would like to provide two reference frames to one marker (C7 and T10) to get more constraints.

Best regards

Gregor

Hi Gregor,

We would still recommend to go to the simpler model so you are aware of all joints that need to be driven as you are missing something.

The spine rhythm does not look correct: “ones for the other numeric” is wrong.
Old spine rhythm: SR(size:18x21)xU(for UnknownJointAngles)(21x1)=P (for DriverPos)(18x1) <- are zeros.
If you multiply and write each equation down you’ll have:
U(18+i) = U(i+3*(0:1:5)), where i is ranged from 1 to 3 (I used pseudo-code). These are the constraints that you defined - I am not sure that this is what you intended to do. In the original rhythm some weights (last 3 columns of SRMatrix) were controlling this distribution.

To define more constraints you could have two markers, say: CreateMarker T10_1, CreateMarker T10_2, which can be driven using Subject_58_T10, but the placement will be different.

Regards,
Pavel

Hello
Thank you for your advice. I modified the FreePosture model of the repository according to my model, and I found the problems. And with “ones for the other numeric” I meant the last 3 columns of SRMatrix(30x33);
{ -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},
{0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
{ 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},


{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1}

I tried different combinations of Joints for the fixation of the ribcage on the thoracic vertebral bodies, but I had always too much or too few constraints. The only thing which works until now is a fix Joint at T1 (AnyStdJoint). But let me know when you know a better solution.

Now I can run the MotionAndParameterOptimisation and the InverseDynamicAnalysis (With UpperBoundOnOff=Off.) But I receive much too high forces and moments between the vertebral bodies (ca. 500 000 [N]). The muscles are overloaded. That is more or less the same thing for all muscle recruitment solvers, except the two following:

Polynomial, Power=3; Error: Muscle recruitment solver: solver aborted after maximum number of iterations
MinMaxStrict; Error: Muscle recruitment solver: maximum number of setbacks occurred

Is there a problem with the calibration of the tendons? But there are solely AnyMuscleModel as muscles, do they also need a calibration?

I don’t know where this large forces and Moments come from, I’m grateful for some advices.

Another question: How are the mass and the inertia properties (Jii) related for the Segment appearance (AnyDrawSeg). I noticed that the thoracic vertebral segments (yellow potatoes) are clearly bigger than the lumbar vertebral segments, although the inertia properties are the same and the thoracic vertebral segments have even a smaller mass. And when I reduce the mass of a thoracic vertebral body, the yellow potato become bigger.

Best regards
Gregor

Hi Gregor,

sorry for taking so long to answer.

The spine rhythm is not correct - please re-read my previous message about it, it does not redistribute angles like you may think it does.
Possibly the large forces come from degenerated kinematics too. Could you try to run pure kinematics? Does it work? Do the results make sense to you?
Regarding the muscle calibration - the native calibration should be just fine for your model.

Best regards,

Pavel

Hello Pavel
Pure kinematics works without problems, but the results don’t make sense. The moments between the intervertebral discs are ca. 50 000 [Nm], and so the reaction forces ca. 1000 000 [N].
In the attachment are the JointsThorax.any, JointsCervix.any and JointsLumbar.any files with the SRMatrixes. I send you these files because it is difficult to describe with words exactly what I did. If you need all the files let me Know. (I have the version 5.0.0 - AMMRV1.3.1)

I think it is also a problem of the connection of the 3 different spine rhythms. I tried different combinations without success; in the JointsThorax.any file you can see the out commented references (Just the 3 lines before the SRMatrixThorax.any). With one of these 3 references the thoracic and the lumbar spine are well connected but the lumbar spine doesn’t deform anymore. And without such a reference the Thoracic and the lumbar spine are not well connected but the lumbar spine deforms like it should. I don’t understand this behavior.

I understood that the spine rhythm is constraining the dof’s of the Joints in respect of a reference. In my model the vertebral bodies of the thoracic spine shouldn’t move in respect to each other, the Pos and Vel are all zero in the AnyKinEqSimpleDriver L1C7Driver in ExtraDrivers.any. So how should in this case the Matrix look like?

Im very grateful for some advices for building up the Matrix and the connection between the Lumbar, thoracic and Cervical Spine rhythm. Could you also take a look at the JointsThorax.any file, if there are some other problems.

Thank you very much
Best regards

Gregor Spreiter

hello Pavel

In attachment is the entire model.

Thank you very much

Gregor

Hi Gregor,

There are quite a few problems with your model. I think having the old thoracic segment will not work. You will have to do something about it.
What happens now is that the old segment is connected to the skull and moves separately from the new thoracic segment. Muscles (attached to the old thoracic segment) will stretch unnaturally and generate non-physiological forces.
If you switch off the muscles and run kinematics you can clearly see that it is wrong. Please do not use kinematic analysis to check the forces - you will need to run the inverse dynamic analysis for that.
You can also use part of the MoCap data to drive just the spine. You don’t need everything else. Our suggestions is to simplify your model first and make sure all components work. Then you can make a slightly more complex model.

Best regards,

Pavel

Hello Pavel

Thank you for your suggestions. I will simplify the model. But what are you thinking about the connection of the 3 different spine rhythm drivers and the SRMatrix of the Thoracic Spine? Are they correct, or how should i them build up?

Best regards

Gregor

having three of them in the same model is not a problem. I think it works, but what it does it makes all the angles in the joints to be equal. You can plot them in the ChartFX window once you ran the kinematics.

Hello

I simplified the model. Now the model contains just the pelvis, sacrum, lumbar- and thoracic spine with modified muscle attachment points. Now I have realistic values. The model is now based on the FreePosture model and is only driven by the pelvis-T12 Driver.

My first question is, why is the strength parameter “specificMuscleTensionSpine” in the FullGaitBody model 150 [N/cm2] and in FreePosture model only 90 [N/cm2]? What is the right value?

Second question: How are the mass and the inertia properties (Jii) related for the Segment appearance (AnyDrawSeg). I noticed that the thoracic vertebral segments (yellow potatoes) are clearly bigger than the lumbar vertebral segments, although the inertia properties are the same and the thoracic vertebral segments have even a smaller mass. And when I reduce the mass of a thoracic vertebral body, the yellow potato become even bigger.

Thank you for your answer

Gregor

Hi Gregor,

These are good news.

The GaitLowerExtremity is an example of a patient-specific model (or somewhat close), whereas the FreePosture is a generic model - so the value is also generic.

Yes, indeed, the segment visualization is dependent on the mass and inertia properties. And the behaviour is normal because of the following equation: Inertia = cmr^2 => the bigger the mass - the lower the radius must be to have the same inertia properties.

Best regards,
Pavel

Hello Pavel

I investigate with my model the influence of muscle anging (sarcopenia) of the erector spinae muscle. Therefore I’m scaling the erector spinae muscle separately. My question is about the Physiological Cross Sectional Area; When I sum up all the PCSA of the Erector spinae and the Spinalis I get 29.39 [cm2] for each side. So I have a total PCSA of nearly 60 [cm2]. Is this correct or did I make an error in reasoning? Because in literature the total PCSA of the erector spinae is about 30 [cm2].

Thank you very much for your answer

Gregor

Hi Gregor,

I am not sure about the details of the spine muscle implementation, but it is based on the anatomical information from the book by Bogduk. I will try to figure out it in detail - in the meantime you can check the following literature and compare to your sources:

Bogduk,N., Clinical anatomy of the lumbar spine and sacrum, Churchill Livingstone, Edinburgh, 1997.
Bogduk,N., Macintosh,J.E., Pearcy,M.J., A universal model of the lumbar back muscles in the upright position, Spine, 17 (1992) 897-913.

Regards,
Pavel

Hello
I have a question concerning the disc stiffness in the spine:
Why are the absolute angles multiplied with the stiffness and not the relative angle to the subsequent vertebral body? I think at this:

AnyFolder L3L4stiff = {


AnyForce L3L4 = {
F = {(-1)…Latbend(Main.HumanModel.BodyModel.Trunk.JointsLumbar.L3L4Jnt.Pos[0]- Main.HumanModel.BodyModel.Trunk.JointsLumbar.L4L5Jnt.Pos[0])*180/pi,



};
AnyKinMeasure &L3L4 = Main.HumanModel.BodyModel.Trunk.JointsLumbar.L3L4Jnt;
};
};

When we subtract the angle of the subsequent vertebral body we have only the displacement between the two vertebras and so the moment which is taken up by them. In the paper: “Schmidt et al. The Stiffness of lumbar spinal motion segments with a high intensity zone in the anulus fibrosus Spine Vol23(20), 1998, pp2167-2173” they write: “Torque-rotation curves and stiffness were calculated for each motion segment and for each torque”. So the moment necessary for a certain motion is based on two subsequent vertebral bodies.

Thank you for your answer

Best regards

Gregor