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

Download this file

151 lines (127 with data), 5.6 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;
  };
  
  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);
      
      #undef __MEASURE_INDEXER
      
      DriverVel = Mask* (...RangeOfMotion[1]-...RangeOfMotion[0])*pi/180/...Study.tEnd;
    };
    
   
   AnyStdJoint TrunkGround={
     AnyRefFrame &Ground = ..ground.node;
     AnyRefFrame &Thorax= ..ThoraxRef; 
   };

  };// Drivers
};// Model

 
AnyKinStudy Study = {
  Gravity = {0,0,0};
  #ifdef EVALUATE_MOMENT_ARMS_NSTEP
  nStep = EVALUATE_MOMENT_ARMS_NSTEP;
  #else
  nStep = 40;
  #endif  
  Kinematics.SmallStepAssumptionOnOff = Off;
  InitialConditions.SmallStepAssumptionOnOff = Off;

  AnyFolder &Model = .Model;
  
  AnyFolder MuscleStrengthCalculations = {
    AnyFolder Abscissa = { 
      AnyVar JointAngle =  not(not(..Model.Drivers.ArmDriver.DriverVel))*..Model.Drivers.ArmMeasure.Pos'*180/pi  ;    
    };
#define _CODE_MACRO_(name) AnyVar name = ( .Model.MusRef.name.Strength);    
        #include "armmuscles_for_output.any"
#undef _CODE_MACRO_
  };
   
  AnyFolder PennationAngleCalculations = {
    AnyFolder Abscissa = { 
      AnyVar JointAngle =  not(not(..Model.Drivers.ArmDriver.DriverVel))*..Model.Drivers.ArmMeasure.Pos'*180/pi  ;    
    };
#define _CODE_MACRO_(name) AnyVar name = ( .Model.MusRef.name.PennationAngle * 180/pi);    
        #include "armmuscles_for_output.any"
#undef _CODE_MACRO_
  };
  
  AnyFolder MomentArmCalculations = {
    AnyFolder Abscissa = { 
      AnyVar JointAngle =  not(not(..Model.Drivers.ArmDriver.DriverVel))*..Model.Drivers.ArmMeasure.Pos'*180/pi  ;    
    };
#define _CODE_MACRO_(name) AnyVar name = ( -1*.Model.MusRef.name.LmtDot/.Model.Drivers.AngularVelocity);    
        #include "armmuscles_for_output.any"
#undef _CODE_MACRO_
  };
};


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

ModelViews = {
  AnyDrawGroup Selection = {
    Objects = arrcat(ObjSearchRecursive(CompleteNameOf(&..Model.ThoraxRef), "*", "AnyDrawObject"), 
                     ObjSearchRecursive(CompleteNameOf(&..Model.CervicalSpineSegRef), "*", "AnyDrawObject"), 
                     ObjSearchRecursive(CompleteNameOf(&..Model.SkullRef), "*", "AnyDrawObject"), 
                     ObjSearchRecursive(CompleteNameOf(&..Model.ArmSegSideRef), "*", "AnyDrawObject"),
                     ObjSearchRecursive(CompleteNameOf(&..Model.MusRef ), "*", "AnyDrawObject"));
  };
  Views = {
    AnyProjectModelViewDefinition SelectedView = {
      DrawGroupSequence = {&..Selection};
      Reset = {On};
    };
  };
};

AnyOperationSequence Run = 
{
    AnyOperationMacro SetView = 
    {
      MacroStr = { "classoperation " + CompleteNameOf(&..ModelViews.Views.SelectedView) + strquote("Set View") };
    };
    AnyOperation &Study = .Study.Kinematics;
//    #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
};