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

Download this file

183 lines (140 with data), 6.3 kB

AnyFolder Model = {
  // Model parts included in the moment arm study
  AnyFolder &ThoraxRef = .....BodyModel.Trunk.SegmentsThorax.ThoraxSeg;
  AnyFolder &SkullRef = .....BodyModel.Trunk.SegmentsCervicalSpine.SkullSeg;
  AnyFolder &CervicalSpineJntRef = .....BodyModel.Trunk.JointsCervicalSpine;
  AnyFolder &CervicalSpineSegRef = .....BodyModel.Trunk.SegmentsCervicalSpine;
  AnyFolder &LumbarJntRef = .....BodyModel.Trunk.JointsLumbar;
  AnyFolder &LumbarSegRef = .....BodyModel.Trunk.SegmentsLumbar;
  AnyFolder &ArmSegSideRef = .SideBodyModelRef.ShoulderArm.Seg;
  AnyFolder &ArmJntsRef =  .SideBodyModelRef.ShoulderArm.Jnt;
  AnyFolder &MusRef = .SideBodyModelRef.ShoulderArm.Mus;
  
 AnyFixedRefFrame ground = {
   AnyRefNode node = { 
      ARel=..ThoraxRef.Axes0;
     sRel=..ThoraxRef.r0;
   };
 };
 
 AnyKinEq FixSkullThoraxPelvis = 
 {
   AnyKinMeasure& SkullThorax = ......BodyModel.Trunk.JointsCervicalSpine.SkullThoraxRotMeasure;
   AnyKinMeasure& PelvisThorax = ......BodyModel.Trunk.JointsLumbar.PelvisThoraxRotMeasure;
 };
 
 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;
 };
 AnyReacForce CervicalSpineReacForce = 
 {
   AnyKinMeasure& Flexion1 = .CervicalSpineJntRef.Flexion.rhythmC2C7;
   AnyKinMeasure& Flexion2 = .CervicalSpineJntRef.Flexion.rhythmC1C0SkullThoraxFlexion;
   AnyKinMeasure& LateralBending = .CervicalSpineJntRef.LateralBending.rhythmC2C7;
   AnyKinMeasure& Rotation1 = .CervicalSpineJntRef.Rotation.rhythmC2C7;
   AnyKinMeasure& Rotation2 = .CervicalSpineJntRef.Rotation.rhythmC2C1SkullThoraxRotation;
 };
 
  
 AnyFolder Drivers = {
   
    AnyVar AngularVelocity = (..RangeOfMotion[1]-..RangeOfMotion[0])*pi/180;
   
   AnyKinMeasureOrg ArmMeasure = {
     #if BM_ARM_SHOULDER_RHYTHM == OFF
     AnyKinMeasure& SCProtraction= ...SideBodyInterfaceRef.SternoClavicularProtraction;
     AnyKinMeasure& SCElevation= ...SideBodyInterfaceRef.SternoClavicularElevation;
     #endif
     AnyKinMeasure& GHAbduction= ...SideBodyInterfaceRef.GlenohumeralAbduction;
     AnyKinMeasure& GHFlexion= ...SideBodyInterfaceRef.GlenohumeralFlexion;
     AnyKinMeasure& GHExternalRotation= ...SideBodyInterfaceRef.GlenohumeralExternalRotation;
     AnyKinMeasure& ElbowFlexion= ...SideBodyInterfaceRef.ElbowFlexion;
     AnyKinMeasure& ElbowPronation= ...SideBodyInterfaceRef.ElbowPronation;
     AnyKinMeasure& WristFlexion= ...SideBodyInterfaceRef.WristFlexion;
     AnyKinMeasure& WristAbduction= ...SideBodyInterfaceRef.WristAbduction;  
   };
      
    AnyKinEqSimpleDriver ArmDriver= {
      AnyKinMeasure& ref = .ArmMeasure;
      
      #if BM_ARM_SHOULDER_RHYTHM == OFF
      #define __MEASURE_INDEXER(X) { X[0],X[1],X[2],X[3],X[4],X[5],X[6],X[7],X[8] }
      #else
      #define __MEASURE_INDEXER(X) { X[2], X[3],X[4],X[5],X[6],X[7],X[8] }
      #endif
      
      DriverPos = __MEASURE_INDEXER(...DriverPos);
      AnyFloat Mask = __MEASURE_INDEXER( ...Mask);
      Reaction.Type = __MEASURE_INDEXER(...Reactions);
      
      #undef __MEASURE_INDEXER
      
      DriverVel = Mask* (...RangeOfMotion[1]-...RangeOfMotion[0])*pi/180/...Study.tEnd;
    };        
   
   
   
   
   
   
   
   
   
   
   
   AnyStdJoint TrunkGround={
     AnyRefFrame &Ground = ..ground.node;
     AnyRefFrame &Thorax= ..ThoraxRef; 
   };
   

   
 };// Drivers
 
 AnyForce JointLoad = {
     AnyKinMeasure& ref = .Drivers.ArmMeasure;
     AnyInt Sign = -round(.Drivers.AngularVelocity/abs(.Drivers.AngularVelocity));
     F = 10*Sign*not(not(.Drivers.ArmDriver.Mask));
 };
 
};


AnyBodyStudy Study = {
  Gravity = {0,0,0};
  tStart = 0;
  tEnd = 1;
  #ifdef EVALUATE_JOINT_STRENGTH_NSTEP
  nStep = EVALUATE_JOINT_STRENGTH_NSTEP;
  #else
  nStep = 40;
  #endif
  
  
  Kinematics.SmallStepAssumptionOnOff = Off;
  InitialConditions.SmallStepAssumptionOnOff = Off;

  Kinematics.PosAnalysisOnlyOnOff = On;
  InitialConditions.PosAnalysisOnlyOnOff = On;
  
  InverseDynamics.Criterion.Type = MR_MinMaxStrict;
  InverseDynamics.Criterion.UpperBoundOnOff = Off;
  
  AnyFolder &Model = .Model;
  
  AnyFolder JointStrength = {
    AnyFolder Abscissa  ={
      AnyVar JointAngle = not(not(..Model.Drivers.ArmDriver.DriverVel))*..Model.Drivers.ArmMeasure.Pos'*180/pi;     
    };
    AnyVar JointStrength = max(abs(.Model.JointLoad.F))/(.MaxMuscleActivity +0.00000001);
    
  };
};


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

ModelViews = {
  AnyDrawGroup Selection = {
    Objects = arrcat(arrcat(
    ObjSearchRecursive(CompleteNameOf(&..Model.ThoraxRef), "*", "AnyDrawObject"), 
    ObjSearchRecursive(CompleteNameOf(&..Model.ArmSegSideRef), "*", "AnyDrawObject")),
    ObjSearchRecursive(CompleteNameOf(&..Model.MusRef), "*", "AnyDrawObject"),
    ObjSearchRecursive(CompleteNameOf(&..Model.SkullRef), "*", "AnyDrawObject"),
    ObjSearchRecursive(CompleteNameOf(&..Model.LumbarSegRef), "*", "AnyDrawObject"),
    ObjSearchRecursive(CompleteNameOf(&..Model.CervicalSpineSegRef), "*", "AnyDrawObject")
    
  );
  };
  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
};