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
};