Dear all,

i am a bit confused about the MaxMuscleActivity (MMA)
Are the following statements correct?

1.) The MMA is the activity of the one muscle which has the highest activity of all muscles for a certain point in time.

2.) The objective value depends on the selected recruitment criterion, and the objective values is the MMA only in the case when the strict MinMax criterion is used for muscle recruitment.

I created a list with the help of the AnySearchFun including all muscle activities, but the maximum of this list has sometime a different value than the MMA.

What might be the reason?



1 Like

or in shorter words:

Why is - for some recruitment types - the largest muscle activity of all muscles smaller than the MaxMuscleActivity?


MaxMuscleActivity is an output value of the AnyBodyStudy class.
It is a maximum value from the all muscles’ activation values in theh model at a time moment.

And we should know that there maybe some muscle elements which are not included in human model.

In the reference manual, you can see ‘AnyMuscle’ class.
This is the base class of all muscle classes.
And AnyMuscle is a derived class of the AnyAppliedForce class.

What I want to tell is that there may be some artificial muscles in the model.
For instance, in the GaitFullBody model,
the ground reaction forces can be transmitted to human foot using AnyGeneralMuscle elements.
Also, in the ‘SeatedHuman’ model in the repository,
the interaction forces between human and seat are modeled using AnyGeneralMuscle elements.

So for the calculation of MaxMuscleActivity in the AnyBodyStudy class,
all the above artificial muscles’ activation values are also considered with the muscles in the human model.

The reason why there are some artificial muscle elements in the model is that sometimes we have to predict unknown interaction forces using inverse dynamics.
And by using some AnyGeneralMuscle elements, those unknown forces can be integrated into one muscle optimization equation.

So if you are really interested in the muscle activity values of human model itself,
I would recommend you to use some of the ‘SelectedOutput’ values of the human model.

You can see the each muscle envelope(maxmuscleactivity) of the human model as follows:

And the above values are defined in these files:

Another way of getting the real muscle activation envelope of human is to define an AnyOutputFun in your AnyBodyStudy class.
Here is an example:

    AnyOutputFun OutputFun_Human_Mus_Envelope = 
      AnyVar Trunk_Mus_Envelope = Main.HumanModel.BodyModel.SelectedOutput.Trunk.Muscles.Envelope;
      AnyVar Left_Arm_Mus_Envelope = Main.HumanModel.BodyModel.SelectedOutput.Left.ShoulderArm.Muscles.Envelope;
      AnyVar Left_Leg_Mus_Envelope = Main.HumanModel.BodyModel.SelectedOutput.Left.Leg.Muscles.Envelope;
      AnyVar Right_Arm_Mus_Envelope = Main.HumanModel.BodyModel.SelectedOutput.Right.ShoulderArm.Muscles.Envelope;
      AnyVar Right_Leg_Mus_Envelope = Main.HumanModel.BodyModel.SelectedOutput.Right.Leg.Muscles.Envelope;
      AnyVector Mus_Envelope_Group = {Trunk_Mus_Envelope, Left_Arm_Mus_Envelope, Left_Leg_Mus_Envelope, Right_Arm_Mus_Envelope, Right_Leg_Mus_Envelope };
      Val = max(Mus_Envelope_Group);

If you add the above code in your AnyBodyStudy instance, then you can see the real muscle activation envelope of human muscles.

I hope this may help you.

Best regards,


Thank you for the detailed explanations.

I have one concern: If the artificial muscles are included in the optimization and dominate the muscle recruitment solution: Is the resultant muscle distribution of the anatomy (which does not contain artificial muscles) the one that we want to have?


It depends on how you would make the model.

For GaitFullBody example, the role of AnyGeneralMuscle is just to transfer the forces from C3D file to human foot through the Force Plate segment.
The forces in AnyGeneralMuscle have same amount as the measured ground reaction forces. So in this case using this kind of AnyGeneralMuscle is not problem at all.

But if you don’t know the interaction forces between human and environment,
then you should predict those values.

The constraint of the muscle optimization in AMS is that the forces should fit the equations of motions in the system.
So even you use some artificial muscles to predict some unknown forces, the amount of those artificial forces can’t exceed the necessary values.

Of course it would be the best if you have the measured interaction forces.
But if not, then you should rely on the prediction method. It’s up to your choice.

I’d introduce an interesting paper which used the prediction for interactions forces:
John Rasmussen, Søren Tørholm Christensen and Mark de Zee (2009): Computational analysis of the influence of seat pan inclination and friction on muscle activity and spinal joint forces. International Journal of Industrial Ergonomics, 39, 52-57.

And you can see the model of this paper in the ‘SeatedHuman’ model in the repository.

Best regards,

I use the StandingModel with some additional muscles, and my MMA is - for a certain criterion - much higher than the maximum muscle activity i can find.
Therefore i am not sure whether i forgot to include some muscles in the list, or whether there are other effects.
Is it somehow possible to find out which muscle is the one with the MMA?

Thanks again,



As I told, the MaxMuscleActivity value is an output of the AnyBodyStudy considering all muscle elements(including AnyGeneralMuscle instances).

This calculation is done automatically by the system, so I’m sorry to say but there is no way to extract all muscle names right now.

If you can upload your model in the ‘Debug model’ section, then I can check your model.

Best regards,

sorry Moonki, for bothering you.

I found a way to determine the muscle with the MMA with the help of ChartFX and “. .(serveral times).Activity" and removing one by one the ".”

The largest activity is in
. . . Leg.JointMuscles.KneeJnt.KneeFlexion.dof0.Muscle.PosMuscle.Activity

I don’t know what this muscle does nor if it should be included in the recruitment solver.
Is there something out of range if this muscle is active?

Thanks again for your patience.

Hi Thomaz,

It seems that you are interested in the upper body muscles so you might remove the muscles in the lower body. Am I right?

If in that case, because there should be some moments that can make movements on the joints of the lower body,
AnyBody human model should have some ‘joint muscles’ in the lower body joints.

Those are not anatomical muscles. Those are a kind of virtual muscles.

Let’s see the code:

  AnyGeneralMuscle PosMuscle={
    AnyVar ROMStrenghtScale=iffun(.ROMExceeded,1.0,0.1); 
    AnyMuscleModelUsr1 MusMdl={
    AnyKinMeasureOrg &ref=.MeasureOrg;
    ForceDirection = 1;

This is an instance of AnyGeneralMuscle. If this AnyGeneralMuscle is attached on the knee joint, it’s a kind of actuator that creates the necessary knee moment.

So according to its strength, the activation level of this AnyGeneralMuscle may be different.

So my answer is, if your work may be really sensitive to muscle activity levels, then I would suggest you to include all muscles on lower body.

Another way is just to increase the strength of those AnyGeneralMuscle objects in the lower body if you are only interested in the muscles in the upper body.

Best regards,

Hello Moonki,

yes, you are right, i am dealing with the trunk. The hint about increasing the JointMuscles’ strengths is worth a mint. Thanks a lot.