[38ba34]: / Body / AAUHuman / LegTLEM / EvaluateJointStrengthStudy.any

Download this file

151 lines (124 with data), 5.4 kB

AnyFolder Model = {
  // Model parts included in the moment arm study
  AnyFolder &ThoraxRef = .....BodyModel.Trunk.SegmentsThorax.ThoraxSeg;
  AnyFolder &SegLumberRef = .....BodyModel.Trunk.SegmentsLumbar; 
  AnyFolder &JointsLumberRef = .....BodyModel.Trunk.JointsLumbar; 
  AnyFolder &LegSegSideRef = .SideBodyModelRef.Leg.Seg; //This is a reference to the folder which holds the human part of the model
  AnyFolder &LegJntsRef =  .SideBodyModelRef.Leg.Jnt;
  AnyFolder &MusRef = .SideBodyModelRef.Leg.EvaluateJointStrengthMusRef ;
//  AnyFolder &LegMusRef = .SideBodyModelRef.Leg.Mus;
//  AnyFolder &SpineMusRef = .SideTrunkMusRef;
  
  AnyFixedRefFrame ground = 
  {
    AnyRefNode node = 
    { 
      ARel=..SegLumberRef.PelvisSeg.Axes0;
      sRel=..SegLumberRef.PelvisSeg.r0;
    };
  };
 

AnyFolder Drivers = {
   AnyVar AngularVelocity = (..RangeOfMotion[1]-..RangeOfMotion[0])*pi/180;
 
 AnyKinMeasureOrg LegMeasure = {
  AnyKinMeasure& HipFlexion= ...SideBodyInterfaceRef.HipFlexion;
  AnyKinMeasure& HipAbduction= ...SideBodyInterfaceRef.HipAbduction;
  AnyKinMeasure& HipExternalRotation= ...SideBodyInterfaceRef.HipExternalRotation;
  AnyKinMeasure& KneeFlexion= ...SideBodyInterfaceRef.KneeFlexion;
  AnyKinMeasure& AnklePlantarFlexion= ...SideBodyInterfaceRef.AnklePlantarFlexion;
  AnyKinMeasure& SubTalarEversion= ...SideBodyInterfaceRef.SubTalarEversion;  
 };
   
 AnyStdJoint PelvisGround={
   AnyRefFrame &Ground = ..ground.node;
   AnyRefFrame &Pelvis= ..SegLumberRef.PelvisSeg; 
 };
 
 AnyReacForce SpineReacForce = 
 {
   AnyKinMeasure& ref1 =  .......BodyModel.Interface.Trunk.Spine.L5Sacrum;
   AnyKinMeasure& ref2 =  .......BodyModel.Interface.Trunk.Spine.L4L5;
   AnyKinMeasure& ref3 =  .......BodyModel.Interface.Trunk.Spine.L3L4;
   AnyKinMeasure& ref4 =  .......BodyModel.Interface.Trunk.Spine.L2L3;
   AnyKinMeasure& ref5 =  .......BodyModel.Interface.Trunk.Spine.L1L2;
 };
 
 
 AnyKinEq ThoraxFix = 
 {
   AnyKinMeasure& PelvisThoraxExtension= .......BodyModel.Interface.Trunk.PelvisThoraxExtension;
   AnyKinMeasure& PelvisThoraxLateralBending= .......BodyModel.Interface.Trunk.PelvisThoraxLateralBending;
   AnyKinMeasure& PelvisThoraxRotation= .......BodyModel.Interface.Trunk.PelvisThoraxRotation;
   Reaction.Type = repmat(nDim, On);
 };    
};// Drivers

  AnyForce JointLoad = {
      AnyKinMeasure& ref = .Drivers.LegMeasure;
      AnyInt Sign = -round(.Drivers.AngularVelocity/abs(.Drivers.AngularVelocity));
      F = 50*Sign*not(not(.Drivers.LegDriver.DriverVel));
  };

};
 
 
AnyBodyStudy Study = {
  Gravity = {0,0,0};
  tStart = 0;
  tEnd = 1000;
  #ifdef EVALUATE_JOINT_STRENGTH_NSTEP
  nStep = EVALUATE_JOINT_STRENGTH_NSTEP;
  #else
  nStep = 40;
  #endif
    
  Kinematics.PosAnalysisOnlyOnOff = On;
  InitialConditions.PosAnalysisOnlyOnOff = On;

  InverseDynamics.Criterion.Type = MR_MinMaxStrict;

  
  AnyFolder &Model = .Model;
  
  AnyFolder JointStrength = {
     AnyFolder Abscissa  ={
        AnyVar JointAngle = not(not(..Model.Drivers.LegDriver.DriverVel))*..Model.Drivers.LegMeasure.Pos'*180/pi;     
     };
     AnyVar JointStrength = max(abs(.Model.JointLoad.F))/(.MaxMuscleActivity+0.00000001);
     
     //AnyVar PsoasMajorT12I = -1*.Model.SpineMusRef.PsoasMajor.PMT12I_TM.LmtDot/.Model.Drivers.AngularVelocity;
  };
  #if ((BM_LEG_MUSCLES_RIGHT != OFF) & (BM_LEG_MUSCLES_LEFT != OFF) & (BM_TRUNK_LUMBAR_MUSCLES != OFF))
  
  AnyFolder MuscleEffectiveStrengthCalculations = {
    AnyFolder Abscissa = { 
      AnyVar JointAngle =  not(not(..Model.Drivers.LegDriver.DriverVel))*..Model.Drivers.LegMeasure.Pos'*180/pi  ;    
    };

#define _CODE_MACRO_(name) AnyVar name = ( .Model.MusRef.LegMuscles.name.Strength *  .Model.MusRef.LegMuscles.name.Activity);    
    #include "legmuscles_for_output.any"
#undef _CODE_MACRO_
  };
#endif
};

#if (ANYBODY_V1 >= 6) & (ANYBODY_V2 >= 1)
AnyFolder ModelViews = { AnyFolder Views =  {}; };
#else
AnyProject ModelViews = {};
#endif

ModelViews = {
  AnyDrawGroup Selection = {
    Objects = arrcat(
      ObjSearchRecursive(CompleteNameOf(&..Model.SegLumberRef ), "*", "AnyDrawObject"), 
      ObjSearchRecursive(CompleteNameOf(&..Model.LegSegSideRef ), "*", "AnyDrawObject"),
      ObjSearchRecursive(CompleteNameOf(&..Model.MusRef.LegMuscles  ), "*", "AnyDrawMuscle"),
      ObjSearchRecursive(CompleteNameOf(&..Model.MusRef.SpineMuscles  ), "*", "AnyDrawMuscle"),
      ObjSearchRecursive(CompleteNameOf(&..Model.MusRef), "*", "AnyDrawMuscle") 
    );
  };
  Views = {
    AnyProjectModelViewDefinition SelectedView = {
      DrawGroupSequence = {&..Selection};
      Reset = {On};
    };
  };
};




AnyOperationSequence Run = 
{
    AnyOperationMacro SetView = 
    {
      MacroStr = { "classoperation " + CompleteNameOf(&..ModelViews.Views.SelectedView) + strquote("Set View") };
    };
    AnyOperation &Study = .Study.InverseDynamics;
//    #ifdef ANYBODY_PATH_OUTPUT
//    AnyOperationMacro Save = 
//    {
//      MacroStr = {
//           "classoperation " + CompleteNameOf(&.Study.Output) + strquote("Save data") 
//           + " --type=" + strquote("Deep") +" --file=" + strquote(
//           ANYBODY_PATH_OUTPUT + .OutputFileName + ".anydata.h5")
//      };
//    #endif
};