[770c98]: / Application / Examples / KneeSimulator / Model / Measures.any

Download this file

235 lines (200 with data), 11.3 kB

AnyFolder Measures = {
  AnyFolder Kinematics = {
    AnyFolder Knee = {
      AnyRefFrame& ref0 = Main.Model.Segs.Tibia.AnatomicalFrame;
      AnyRefFrame& ref1 = Main.Model.Segs.Femur.AnatomicalFrame;    
            
      AnyFolder Floating = {
        AnyFolder Segs = {
          AnySeg Femur_Dummy = {
            r0 = Main.Model.Segs.Femur.r0 
            + Main.Model.Segs.Femur.AnatomicalFrame.sRel * Main.Model.Segs.Femur.Axes0';
            Axes0 = Main.Model.Segs.Femur.Axes0 * Main.Model.Segs.Femur.AnatomicalFrame.ARel;
            Mass = 0;
            Jii = {0, 0, 0};           
          }; 
          
          AnySeg Tibia_Dummy = {
            r0 = Main.Model.Segs.Tibia.r0 
            + Main.Model.Segs.Tibia.AnatomicalFrame.sRel * Main.Model.Segs.Tibia.Axes0';
            Axes0 = Main.Model.Segs.Tibia.Axes0 * Main.Model.Segs.Tibia.AnatomicalFrame.ARel;
            Mass = 0;
            Jii = {0, 0, 0};           
          };           
        };//Segs
        
        AnyFolder Joints = {
          AnyCylindricalJoint Femur_Connect = {
            Axis = x;
            AnyRefFrame& ref0 = Main.Model.Segs.Femur.AnatomicalFrame;
            AnyRefFrame& ref1 = ..Segs.Femur_Dummy;
          };
          
          AnyCylindricalJoint Inter_Connect = {
            Axis = y;
            AnyRefFrame& ref0 = ..Segs.Femur_Dummy;
            AnyRefFrame& ref1 = ..Segs.Tibia_Dummy;
          }; 
          
          AnyCylindricalJoint Tibia_Connect = {
            Axis = z;
            AnyRefFrame& ref0 = ..Segs.Tibia_Dummy;
            AnyRefFrame& ref1 = Main.Model.Segs.Tibia.AnatomicalFrame;
          };  
        };
        
        AnyFolder Measures = {
          AnyVar Lin_Tibia_LateralMedial = .Joints.Femur_Connect.Pos[0] ;
          AnyVar Lin_Tibia_AnteriorPosterior = .Joints.Inter_Connect.Pos[0];
          AnyVar Lin_Tibia_SuperiorInferior = .Joints.Tibia_Connect.Pos[0] ;
          
          AnyVar Rot_Tibia_FlexionExtension = (-1)*.Joints.Femur_Connect.Pos[1];
          AnyVar Rot_Tibia_AdductionAbduction = .Joints.Inter_Connect.Pos[1];
          AnyVar Rot_Tibia_InternalExternal = .Joints.Tibia_Connect.Pos[1];
          
          AnyVar Lin_Tibia_LateralMedial_in_mm = Lin_Tibia_LateralMedial * 1000;
          AnyVar Lin_Tibia_AnteriorPosterior_in_mm = Lin_Tibia_AnteriorPosterior * 1000;
          AnyVar Lin_Tibia_SuperiorInferior_in_mm = Lin_Tibia_SuperiorInferior * 1000;
          
          AnyVar Rot_Tibia_FlexionExtension_in_deg = Rot_Tibia_FlexionExtension*(180/pi);
          AnyVar Rot_Tibia_AdductionAbduction_in_deg = Rot_Tibia_AdductionAbduction*(180/pi);
          AnyVar Rot_Tibia_InternalExternal_in_deg = Rot_Tibia_InternalExternal*(180/pi);
        };
      };//Floating
    };//Knee
    
    AnyFolder Patella = {
      AnyFolder Floating = {
        AnyFolder Segs = {
          AnySeg Femur_Dummy = {
            r0 = Main.Model.Segs.Femur.r0 
            + Main.Model.Segs.Femur.AnatomicalFrame.sRel * Main.Model.Segs.Femur.Axes0';
            Axes0 = Main.Model.Segs.Femur.Axes0 * Main.Model.Segs.Femur.AnatomicalFrame.ARel;
            Mass = 0;
            Jii = {0, 0, 0};            
          }; 
          
          AnySeg Patella_Dummy = {
            r0 = Main.Model.Segs.Patella.r0 
            + Main.Model.Segs.Patella.AnatomicalFrame.sRel * Main.Model.Segs.Patella.Axes0';
            Axes0 = Main.Model.Segs.Patella.Axes0 * Main.Model.Segs.Patella.AnatomicalFrame.ARel;
            Mass = 0;
            Jii = {0, 0, 0};            
          };           
        };//Segs
        
        AnyFolder Joints = {
          AnyCylindricalJoint Femur_Connect = {
            Axis = x;
            AnyRefFrame& ref0 = Main.Model.Segs.Femur.AnatomicalFrame;
            AnyRefFrame& ref1 = ..Segs.Femur_Dummy;
          };
          
          AnyCylindricalJoint Inter_Connect = {
            Axis = y;
            AnyRefFrame& ref0 = ..Segs.Femur_Dummy;
            AnyRefFrame& ref1 = ..Segs.Patella_Dummy;
          };
          
          AnyCylindricalJoint Patella_Connect = {
            Axis = z;
            AnyRefFrame& ref0 = ..Segs.Patella_Dummy;
            AnyRefFrame& ref1 = Main.Model.Segs.Patella.AnatomicalFrame;
          };  
        };
        
        AnyFolder Measures = {
          AnyVar Lin_Patella_MedialShift = -.Joints.Femur_Connect.Pos[0] ;
          AnyVar Lin_Patella_AnteriorPosterior = .Joints.Inter_Connect.Pos[0];
          AnyVar Lin_Patella_SuperiorInferior = .Joints.Patella_Connect.Pos[0] ;
          
          AnyVar Rot_Patella_FlexionExtension = (-1)*.Joints.Femur_Connect.Pos[1];
          AnyVar Rot_Patella_MedialSpin = .Joints.Inter_Connect.Pos[1];
          AnyVar Rot_Patella_MedialTilt = .Joints.Patella_Connect.Pos[1];
          
          AnyVar Lin_Patella_MedialShift_in_mm = Lin_Patella_MedialShift * 1000;
          AnyVar Lin_Patella_AnteriorPosterior_in_mm = Lin_Patella_AnteriorPosterior * 1000;
          AnyVar Lin_Patella_SuperiorInferior_in_mm = Lin_Patella_SuperiorInferior * 1000;
          
          AnyVar Rot_Patella_FlexionExtension_in_deg = Rot_Patella_FlexionExtension*(180/pi);
          AnyVar Rot_Patella_MedialSpin_in_deg = Rot_Patella_MedialSpin*(180/pi);
          AnyVar Rot_Patella_MedialTilt_in_deg = Rot_Patella_MedialTilt*(180/pi);
        };
      };//Floating    
    };//Patella
    
    AnyFolder Ligaments = {
      AnyVar aPCL_Length_in_mm = Main.Model.Ligaments.aPCL.PLine.Pos[0] * 1000.0;
      AnyVar pPCL_Length_in_mm = Main.Model.Ligaments.pPCL.PLine.Pos[0] * 1000.0;
      AnyVar LCL_Length_in_mm = Main.Model.Ligaments.LCL.PLine.Pos[0] * 1000.0;
    };
  };//Kinematics
  
  
  AnyFolder Kinetics = {
    #if USE_FDK == 1
    AnyFolder TibioFemoral = {
      AnyVar Contact_Total = vnorm(Main.Model.Contacts.Femur_Tibia_medial.Fmaster+Main.Model.Contacts.Femur_Tibia_lateral.Fmaster);
    };

    AnyFolder PatelloFemoral = {
      AnyVar Contact_Total = vnorm(Main.Model.Contacts.Femur_Patella.Fmaster);
    };
    #endif
    
    AnyFolder aPCL = {
      AnyVar Force = abs(Main.Model.Ligaments.aPCL.Force.Fout[0]);
    };
    
    AnyFolder pPCL = {
      AnyVar Force = abs(Main.Model.Ligaments.pPCL.Force.Fout[0]);
    };    
  };
  
  AnyFolder Forces = {
    AnyVar BodyWeight = BODY_MASS * vnorm(Main.KneeSimulatorStudy.Gravity);
    
    AnyFolder Quadriceps = {
      AnyVar Force = abs(Main.KneeSimulatorStudy.Actuators.Quadriceps.Fout[0]);
      AnyVar Force_Ratio_BW = Force / .BodyWeight ;
    };      
    
      #if USE_FDK == 1
      AnyFolder TibioFemoral = {
        
        AnyForceMomentMeasure2 Measure_Contact_Total = {
          AnyForceBase& ForceM = Main.Model.Contacts.Femur_Tibia_medial;
          AnyForceBase& ForceL = Main.Model.Contacts.Femur_Tibia_lateral;
          AnyRefFrame& RefNode = Main.Model.Segs.Tibia.AnatomicalFrame;
          AnySeg& Seg = Main.Model.Segs.Tibia;
          AnyVec3 Flocal = F*RefNode.Axes;
          AnyVec3 Mlocal = M*RefNode.Axes;
        };
        
        AnyForceMomentMeasure2 Measure_Contact_Medial = {
          AnyForceBase& Force = Main.Model.Contacts.Femur_Tibia_medial;
          AnyRefFrame& RefNode = Main.Model.Segs.Tibia.AnatomicalFrame;
          AnySeg& Seg = Main.Model.Segs.Tibia;
          AnyVec3 Flocal = F*RefNode.Axes;
          AnyVec3 Mlocal = M*RefNode.Axes;
        };  

        AnyForceMomentMeasure2 Measure_Contact_Lateral = {
          AnyForceBase& Force = Main.Model.Contacts.Femur_Tibia_lateral;
          AnyRefFrame& RefNode = Main.Model.Segs.Tibia.AnatomicalFrame;
          AnySeg& Seg = Main.Model.Segs.Tibia;
          AnyVec3 Flocal = F*RefNode.Axes;
          AnyVec3 Mlocal = M*RefNode.Axes;
        }; 

        AnyVar ContactForce_BothCondyles_Compression = -Measure_Contact_Total.Flocal[2];
        AnyVar ContactForce_BothCondyles_Anterior    =  Measure_Contact_Total.Flocal[1];
        AnyVar ContactForce_BothCondyles_Lateral     =  Measure_Contact_Total.Flocal[0];
        AnyVar ContactForce_BothCondyles_Total       =  vnorm(Measure_Contact_Total.Flocal);
        AnyVar ContactForce_MedialCondyle_Compression = -Measure_Contact_Medial.Flocal[2];
        AnyVar ContactForce_MedialCondyle_Anterior    =  Measure_Contact_Medial.Flocal[1];
        AnyVar ContactForce_MedialCondyle_Lateral     =  Measure_Contact_Medial.Flocal[0];
        AnyVar ContactForce_MedialCondyle_Total       =  vnorm(Measure_Contact_Medial.Flocal);
        AnyVar ContactForce_LateralCondyle_Compression = -Measure_Contact_Lateral.Flocal[2];
        AnyVar ContactForce_LateralCondyle_Anterior    =  Measure_Contact_Lateral.Flocal[1];
        AnyVar ContactForce_LateralCondyle_Lateral     =  Measure_Contact_Lateral.Flocal[0];
        AnyVar ContactForce_LateralCondyle_Total       =  vnorm(Measure_Contact_Lateral.Flocal);

        AnyVar ContactForce_BothCondyles_Compression_Ratio_BW = abs(ContactForce_BothCondyles_Compression) / .BodyWeight ;
        AnyVar ContactForce_BothCondyles_Anterior_Ratio_BW    = abs(ContactForce_BothCondyles_Anterior) / .BodyWeight ;
        AnyVar ContactForce_BothCondyles_Lateral_Ratio_BW     = abs(ContactForce_BothCondyles_Lateral) / .BodyWeight ;
        AnyVar ContactForce_BothCondyles_Total_Ratio_BW       = abs(ContactForce_BothCondyles_Total) / .BodyWeight ;
        AnyVar ContactForce_MedialCondyle_Compression_Ratio_BW = abs(ContactForce_MedialCondyle_Compression) / .BodyWeight ;
        AnyVar ContactForce_MedialCondyle_Anterior_Ratio_BW    = abs(ContactForce_MedialCondyle_Anterior) / .BodyWeight ;
        AnyVar ContactForce_MedialCondyle_Lateral_Ratio_BW     = abs(ContactForce_MedialCondyle_Lateral) / .BodyWeight ;
        AnyVar ContactForce_MedialCondyle_Total_Ratio_BW       = abs(ContactForce_MedialCondyle_Total) / .BodyWeight ;
        AnyVar ContactForce_LateralCondyle_Compression_Ratio_BW = abs(ContactForce_LateralCondyle_Compression) / .BodyWeight ;
        AnyVar ContactForce_LateralCondyle_Anterior_Ratio_BW    = abs(ContactForce_LateralCondyle_Anterior) / .BodyWeight ;
        AnyVar ContactForce_LateralCondyle_Lateral_Ratio_BW     = abs(ContactForce_LateralCondyle_Lateral) / .BodyWeight ;
        AnyVar ContactForce_LateralCondyle_Total_Ratio_BW       = abs(ContactForce_LateralCondyle_Total) / .BodyWeight ;
      };

      AnyFolder PatelloFemoral = {
        AnyVar ContactForce = abs(vnorm(Main.Model.Contacts.Femur_Patella.Fmaster));
        AnyVar ContactForce_Stress = 
        NONE_ZERO_DIVISION(ContactForce, Main.Model.Contacts.Femur_Patella.ContactArea, 1e-5);
        
        AnyVar ContactForce_Ratio_BW = ContactForce / .BodyWeight;       
        AnyVar ContactForce_Ratio_QuadricepsForce =  
        NONE_ZERO_DIVISION(ContactForce, .Quadriceps.Force, 1e-5);
      };
      #endif
        
      AnyFolder PatelloTibial = {
        AnyVar TendonForce = abs(Main.Model.Tendons.PT.Length_Driver.Reaction.Fout[0]);
        AnyVar TendonForce_Ratio_BW = TendonForce / .BodyWeight;
        AnyVar TendonForce_Ratio_QuadricepsForce =  
        NONE_ZERO_DIVISION(TendonForce, .Quadriceps.Force, 1e-5);        
      };
   };
};