Switch to side-by-side view

--- a
+++ b/Application/Examples/AirlinePassenger/Model/JointsAndDrivers.any
@@ -0,0 +1,581 @@
+AnyFolder Jnt={
+  
+  AnyFolder &RefP=..EnvironmentModel;
+  AnyFolder &RefS=.Segments;
+  AnyFolder &RefH = ..BodyModel;
+  
+  //----------------------------------------------
+  // Joints - Pelvis - Seat
+  //----------------------------------------------
+  
+  AnyFolder PelvisSeatJnt = {
+    
+    AnyKinLinear PelvisSeatLinMeasure = {
+      AnyRefFrame &SeatRef = ..RefP.Seg.Seat.SeatPelvisJntNode;
+      SeatRef={
+        //AnyDrawRefFrame test ={ScaleXYZ={0.4,0.4,0.4};};
+      };
+      AnyRefFrame &PelvisRef = ..RefS.Pelvis.Seat_contactCenter;
+      Ref = 0;
+    };
+    
+    AnyKinRotational PelvisSeatRotMeasure = {
+      AnyRefFrame &SeatRef = ..RefP.Seg.Seat.SeatPelvisJntNode;
+      AnyRefFrame &PelvisRef = ..RefS.Pelvis.Seat_contactCenter;  
+      Type = RotVector;
+    };
+    
+    AnyKinEqSimpleDriver PelvisSeatEq = {
+      AnyKinLinear &LinearMeasure  = .PelvisSeatLinMeasure;
+      AnyKinRotational &RotMeasure = .PelvisSeatRotMeasure;        
+      MeasureOrganizer = {0,2,3,4};
+      //DriverPos = {0.01,0,0,0};
+      DriverPos = {-0.04,0,0,0};
+
+      DriverVel = {0,0,0,0};
+      Reaction.Type = {Off,Off,Off,Off};
+    };          
+    
+    AnyKinMeasureOrg PelvisSeatMeasureOrg = {
+      AnyKinLinear &LinearMeasure = .PelvisSeatLinMeasure;
+      MeasureOrganizer = {0};
+    };
+  }; // PelvisSeatJnt
+  
+  //------------------------------------------------
+  // Joint - BackRest - Thorax 
+  //------------------------------------------------
+  AnyFolder BackRestThoraxJnt = {
+    
+    AnyKinLinear BackRestThoraxLinMeasure = {
+      AnyRefFrame &BackRestRef = ..RefP.Seg.BackRest;
+      AnyRefFrame &ThoraxRef = ..RefH.Trunk.SegmentsThorax.ThoraxSeg.T2SupportNode;//ThoraxBackRestJntNode;
+      Ref = 0;
+    };
+    
+    AnyKinEqSimpleDriver BackRestThoraxEq = {
+      AnyKinLinear &LinearMeasure = .BackRestThoraxLinMeasure;
+      MeasureOrganizer = {0};
+      DriverPos = {0.03};
+      DriverVel = {0};
+      Reaction.Type = {Off};
+    };
+  }; // BackRestThoraxJnt
+  
+// this is default in Body now!  
+//  AnyReacForce T10={
+//    AnyJoint &ref=  Main.Model.BodyModel.Trunk.JointsLumbar.T12L1Jnt;
+//  };
+//  
+  AnyFolder FootRestFootJnt = {
+    AnyFolder Right = {      
+      
+      AnyKinLinear FootRestFootLinMeasure = {
+        AnyRefFrame &FootRestRef = ...RefP.Seg.FootRest.FootRestRotNodeRight;//FootRestFootJntNodeRight;
+        AnyRefFrame &FootRef = ...RefH.Right.Leg.Seg.Foot.AnatomicalFrame.FootFootRestJntNode;
+        Ref = 0;
+      };
+      
+      AnyKinRotational FootRestFootRotMeasure = {
+        AnyRefFrame &FootRestRef = .FootRestFootLinMeasure.FootRestRef;
+        AnyRefFrame &FootRef = .FootRestFootLinMeasure.FootRef;
+        Type = RotVector;
+      };
+      
+      AnyKinEqSimpleDriver FootRestFootEq = {
+        AnyKinLinear &LinMeasure = .FootRestFootLinMeasure;
+        AnyKinRotational &RotMeasure = .FootRestFootRotMeasure;
+        MeasureOrganizer = {0,1,2,4,5};
+        DriverPos = {0.01,0,0,0,0};
+        DriverVel = {0,0,0,0,0};       
+        Reaction.Type = {Off,Off,Off,Off,Off};        
+      };  
+      
+      AnyKinMeasureOrg FootRestFootMeasureOrg = {
+        AnyKinLinear &LinearMeasure = .FootRestFootLinMeasure;
+        MeasureOrganizer = {0};
+      };
+      
+      AnyKinEqSimpleDriver AnkleDriver ={
+        #if BM_LEG_MODEL == _LEG_MODEL_LEG_
+          AnyJoint &ref = ...RefH.Right.Leg.Jnt.Ankle;
+          MeasureOrganizer={1};
+        #else
+          AnyJoint &ref = ...RefH.Right.Leg.Jnt.SubTalar;
+        #endif        
+        DriverPos={0};
+        DriverVel={0};
+      };
+    }; //Right
+    
+    AnyFolder Left = {
+      
+      AnyKinLinear FootRestFootLinMeasure = {
+        AnyRefFrame &FootRestRef = ...RefP.Seg.FootRest.FootRestRotNodeLeft;
+        AnyRefFrame &FootRef = ...RefH.Left.Leg.Seg.Foot.AnatomicalFrame.FootFootRestJntNode;
+        Ref = 0;
+      };
+      
+      AnyKinRotational FootRestFootRotMeasure = {
+        AnyRefFrame &FootRestRef = .FootRestFootLinMeasure.FootRestRef;
+        AnyRefFrame &FootRef = .FootRestFootLinMeasure.FootRef;
+
+        Type = RotVector;
+      };
+      AnyKinEqSimpleDriver FootRestFootEq = {
+        AnyKinLinear &LinMeasure = .FootRestFootLinMeasure;
+        AnyKinRotational &RotMeasure = .FootRestFootRotMeasure;
+        MeasureOrganizer = {0,1,2,4,5};
+        DriverPos = {0.01,0,0,0,0};
+        DriverVel = {0,0,0,0,0};  
+        Reaction.Type = {Off,Off,Off,Off,Off};        
+      };       
+      
+      AnyKinMeasureOrg FootRestFootMeasureOrg = {
+        AnyKinLinear &LinearMeasure = .FootRestFootLinMeasure;
+        MeasureOrganizer = {0};
+      };
+      
+      AnyKinEqSimpleDriver AnkleDriver ={
+        #if BM_LEG_MODEL == _LEG_MODEL_LEG_
+          AnyJoint &ref = ...RefH.Left.Leg.Jnt.Ankle;
+          MeasureOrganizer={1};
+        #else
+          AnyJoint &ref = ...RefH.Left.Leg.Jnt.SubTalar;
+        #endif        
+        DriverPos={0};
+        DriverVel={0};
+      };
+    }; //Left    
+
+//    AnyFolder Right = {      
+//      
+//      AnyKinLinear FootRestFootLinMeasure = {
+//        AnyRefFrame &FootRestRef = ...RefP.Seg.FootRest.FootRestFootJntNodeRight;
+//        AnyRefFrame &FootRef = ...RefH.Right.Leg.Seg.Foot.FootFootRestJntNode;
+//        Ref = 0;
+//      };
+//      
+//      AnyKinRotational FootRestFootRotMeasure = {
+//        AnyRefFrame &FootRestRef = ...RefP.Seg.FootRest.FootRestFootJntNodeRight;
+//        AnyRefFrame &FootRef = ...RefH.Right.Leg.Seg.Foot.FootFootRestJntNode;
+//        Type = RotVector;
+//      };
+//      
+//      AnyKinEqSimpleDriver FootRestFootEq = {
+//        AnyKinLinear &LinMeasure = .FootRestFootLinMeasure;
+//        AnyKinRotational &RotMeasure = .FootRestFootRotMeasure;
+//        MeasureOrganizer = {0,1,2,4,5};
+//        DriverPos = {0.01,0,0,0,0};
+//        DriverVel = {0,0,0,0,0};       
+//        Reaction.Type = {Off,Off,Off,Off,Off};        
+//      };  
+//      
+//      AnyKinMeasureOrg FootRestFootMeasureOrg = {
+//        AnyKinLinear &LinearMeasure = .FootRestFootLinMeasure;
+//        MeasureOrganizer = {0};
+//      };
+//      
+////      AnyKinEqSimpleDriver AnkleDriver ={
+////        #if BM_LEG_MODEL == _LEG_MODEL_LEG_
+////         AnyKinMeasure& ref =...RefH.Interface.Right.AnkleEversion;
+////       #else
+////         AnyKinMeasure& ref =...RefH.Interface.Right.SubTalarEversion;
+////#endif
+////       
+////        DriverPos={0};
+////        DriverVel={0};
+////      };
+//AnyKinEqSimpleDriver AnkleDriver ={
+//        #if BM_LEG_MODEL == _LEG_MODEL_LEG_
+//          AnyJoint &ref = ...RefH.Right.Leg.Jnt.Ankle;
+//          MeasureOrganizer={1};
+//        #else
+//          AnyJoint &ref = ...RefH.Right.Leg.Jnt.SubTalar;
+//        #endif        
+//        DriverPos={0};
+//        DriverVel={0};
+//      };
+//
+//
+//    }; //Right
+//    
+//    AnyFolder Left = {
+//      
+//      AnyKinLinear FootRestFootLinMeasure = {
+//        AnyRefFrame &FootRestRef = ...RefP.Seg.FootRest.FootRestFootJntNodeLeft;
+//        AnyRefFrame &FootRef = ...RefH.Left.Leg.Seg.Foot.FootFootRestJntNode;
+//        Ref = 0;
+//      };
+//      
+//      AnyKinRotational FootRestFootRotMeasure = {
+//        AnyRefFrame &FootRestRef = ...RefP.Seg.FootRest.FootRestFootJntNodeLeft;
+//        AnyRefFrame &FootRef = ...RefH.Left.Leg.Seg.Foot.FootFootRestJntNode;
+//        Type = RotVector;
+//      };
+//      AnyKinEqSimpleDriver FootRestFootEq = {
+//        AnyKinLinear &LinMeasure = .FootRestFootLinMeasure;
+//        AnyKinRotational &RotMeasure = .FootRestFootRotMeasure;
+//        MeasureOrganizer = {0,1,2,4,5};
+//        DriverPos = {0.01,0,0,0,0};
+//        DriverVel = {0,0,0,0,0};  
+//        Reaction.Type = {Off,Off,Off,Off,Off};        
+//      };       
+//      
+//      AnyKinMeasureOrg FootRestFootMeasureOrg = {
+//        AnyKinLinear &LinearMeasure = .FootRestFootLinMeasure;
+//        MeasureOrganizer = {0};
+//      };
+//      
+//      AnyKinEqSimpleDriver AnkleDriver ={
+//        #if BM_LEG_MODEL == _LEG_MODEL_LEG_
+//          AnyJoint &ref = ...RefH.Left.Leg.Jnt.Ankle;
+//          MeasureOrganizer={1};
+//        #else
+//          AnyJoint &ref = ...RefH.Left.Leg.Jnt.SubTalar;
+//        #endif        
+//        DriverPos={0};
+//        DriverVel={0};
+//      };
+//
+//      
+////      AnyKinEqSimpleDriver AnkleDriver ={
+////       
+////        #if BM_LEG_MODEL == _LEG_MODEL_LEG_
+////         AnyKinMeasure& ref =...RefH.Interface.Left.AnkleEversion;
+////       #else
+////         AnyKinMeasure& ref =...RefH.Interface.Left.SubTalarEversion;
+////#endif
+////       
+////        DriverPos={0};
+////        DriverVel={0};
+////      };
+//    }; //Left    
+    
+  }; // FootFootRestJnt  
+  
+  //  AnyFolder UlnaArmRestJnt = {
+  //    
+  //    AnyFolder Right = {
+  //      AnyKinEqSimpleDriver ArmRestElbowLinMeasureXDrv={
+  //        AnyKinLinear ArmRestElbowLinMeasure = {
+  //          AnyRefFrame &ArmRest = ....RefP.Seg.Right.ArmRest.ArmRestUlnaJntNodeBack;
+  //          AnyRefFrame &Ulna = ....RefH.Right.ShoulderArm.Seg.Ulna.ol;
+  //        };        
+  //        MeasureOrganizer = {1};
+  //        DriverPos={0};
+  //        DriverVel={0};
+  //        Reaction.Type={Off};
+  //      };
+  //            
+  //      AnyKinEqSimpleDriver ArmRestWristLinMeasureXDrv={
+  //        AnyKinLinear ArmRestWristLinMeasure = {
+  //          AnyRefFrame &ArmRest = ....RefP.Seg.Right.ArmRest.ArmRestUlnaJntNodeFront;
+  //          AnyRefFrame &Ulna = ....RefH.Right.ShoulderArm.Seg.Ulna.us;
+  //        };
+  //        MeasureOrganizer = {1,2};
+  //        DriverPos={0,0};
+  //        DriverVel={0,0};
+  //        Reaction.Type={Off,Off};
+  //      };      
+  //    }; // Right
+  //    
+  //    AnyFolder Left = {
+  //      AnyKinEqSimpleDriver ArmRestElbowLinMeasureXDrv={
+  //        AnyKinLinear ArmRestElbowLinMeasure = {
+  //          AnyRefFrame &ArmRest = ....RefP.Seg.Left.ArmRest.ArmRestUlnaJntNodeBack;
+  //          AnyRefFrame &Ulna = ....RefH.Left.ShoulderArm.Seg.Ulna.ol;
+  //        };        
+  //        MeasureOrganizer = {1};
+  //        DriverPos={0};
+  //        DriverVel={0};
+  //        Reaction.Type={Off};
+  //      };
+  //            
+  //      AnyKinEqSimpleDriver ArmRestWristLinMeasureXDrv={
+  //        AnyKinLinear ArmRestWristLinMeasure = {
+  //          AnyRefFrame &ArmRest = ....RefP.Seg.Left.ArmRest.ArmRestUlnaJntNodeFront;
+  //          AnyRefFrame &Ulna = ....RefH.Left.ShoulderArm.Seg.Ulna.us;
+  //        };
+  //        MeasureOrganizer = {1,2};
+  //        DriverPos={0,0};
+  //        DriverVel={0,0};
+  //        Reaction.Type={Off,Off};
+  //      };      
+  //    }; // Left    
+  //  }; // UlnaArmRestJnt
+}; //Jnt
+
+//--------------------------------------------------
+// Drivers
+//--------------------------------------------------
+
+AnyFolder Drivers = {
+  
+  AnyFolder &RefHM = Main.Model.BodyModel;
+  AnyFolder &RefPM = Main.Model.EnvironmentModel;
+  AnyFolder &DrvPos = Main.DrvPos;
+  AnyFolder &DrvVel = Main.DrvVel;
+  AnyFolder &JntPos=..Mannequin.Posture;
+  AnyFolder &JntVel=..Mannequin.PostureVel;
+  
+  //-------------------------------------------------------
+  //  Drivers - spine
+  //-------------------------------------------------------
+  
+  AnyKinEqSimpleDriver PelvisSeatDrv = {
+    AnyKinMeasure& LinMeasure = ..Jnt.PelvisSeatJnt.PelvisSeatLinMeasure;
+    MeasureOrganizer = {1};    
+    DriverPos = {-.DrvPos.PelvisSeatLinXPos};
+    DriverVel = {-.DrvVel.PelvisSeatLinXVel};
+    Reaction.Type = {Off}; 
+  };    
+  
+  //-------------------------------------------------------
+  //  Drivers - spine
+  //-------------------------------------------------------
+  
+  //Thorax pelvis rotation driver
+  AnyKinEqSimpleDriver PostureDriver ={
+    AnyKinMeasure& Ref2 = ...BodyModel.Interface.Trunk.PelvisThoraxLateralBending;        
+    AnyKinMeasure& Ref3 = ...BodyModel.Interface.Trunk.PelvisThoraxRotation;   
+    //AnyKinMeasure& Ref1 = ...BodyModel.Interface.Trunk.PelvisThoraxExtension;
+    
+    DriverPos = pi/180*{
+      .JntPos.PelvisThoraxLateralBending,
+      .JntPos.PelvisThoraxRotation
+      // .JntPos.PelvisThoraxExtension
+    };
+    DriverVel = pi/180*{
+      .JntVel.PelvisThoraxLateralBending,
+      .JntVel.PelvisThoraxRotation
+      //  .JntVel.PelvisThoraxExtension
+    };
+    Reaction.Type = {Off,Off};  
+  };  
+  
+  //Neck driver 
+  AnyKinEqSimpleDriver NeckJntDriver = {
+    AnyKinMeasure& lb = ...BodyModel.Interface.Trunk.SkullThoraxLateralBending;
+    AnyKinMeasure& ar = ...BodyModel.Interface.Trunk.SkullThoraxRotation;
+    AnyKinMeasure& fe = ...BodyModel.Interface.Trunk.SkullThoraxFlexion;
+    DriverPos = pi/180*{.JntPos.NeckLateralBending, .JntPos.NeckRotation, -1*.JntPos.NeckExtension};
+    DriverVel = pi/180*{.JntVel.NeckLateralBending, .JntVel.NeckRotation, -1*.JntVel.NeckExtension};
+    Reaction.Type = {Off, Off, Off};
+  };
+  
+  //This was not previously... but is easier to use with the detailed spine
+  AnyKinRotational PelvisGlobalRotMeasure = {
+    AnyRefFrame &PelvisRef = .RefHM.Trunk.SegmentsLumbar.PelvisSeg;  
+    AnyRefFrame &GlobalRef = .RefPM.GlobalRef;
+    Type = RotVector;
+  };
+  
+  AnyKinMeasureOrg PelvisGlobalRotZMeasure = {
+    AnyKinMeasure& RotMeasure = .PelvisGlobalRotMeasure;
+    MeasureOrganizer = {2};
+  };
+  
+  AnyKinRotational ThoraxGlobalRotMeasure = {
+    AnyRefFrame &ThoraxRef = .RefHM.Trunk.SegmentsThorax.ThoraxSeg;  
+    AnyRefFrame &GlobalRef = .RefPM.GlobalRef;
+    Type = RotVector;
+  }; 
+  
+  AnyKinMeasureOrg ThoraxGlobalRotZMeasure = {
+    AnyKinMeasure& RotMeasure = .ThoraxGlobalRotMeasure;
+    MeasureOrganizer = {2};
+  }; 
+  
+  
+  //  AnyKinEqSimpleDriver PelvisSeatRhythmDrv = {
+  //    AnyKinMeasureLinComb Measure = {
+  //      AnyKinMeasure& u1 = ..PelvisGlobalRotZMeasure;
+  //      AnyKinMeasure& u2 = ..ThoraxGlobalRotZMeasure;
+  //      Coef = {{1/(0.0533), -1/(0.0533)}};
+  //      Const = {-(0.6665/(-0.1433))};
+  //    }; // Measure
+  //    DriverPos = {180*pi/180+Main.DrvPos.GlobalBackRestRotZPos};
+  //    DriverVel = {Main.DrvVel.GlobalBackRestRotZVel};
+  //    Reaction.Type = {Off};
+  //  }; // SeatBackRestDrv
+  
+  //AnyKinEqSimpleDriver tmp = {
+  //  AnyKinRotational PelvisThorax = {
+  //    AnyRefFrame &Thorax = Main.Model.BodyModel.Trunk.SegmentsThorax.ThoraxSeg;
+  //    AnyRefFrame &Pelvis = Main.Model.BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
+  //    Type = RotAxesAngles;
+  //  };
+  //  MeasureOrganizer = {0};
+  //  DriverPos = {30*pi/180};
+  //  DriverVel = {-15*pi/180};
+  //};
+  
+  // Rhythm between the hip angles and the lumbar spine angle. Based on Tully et al, 
+  // Spine 27, E432-E440, the relationship between these angles is set to 3:1,
+  // where we define the hip angle as the average of the two hip angles.
+  
+  AnyKinEq ThoraxThighRhythm = {
+    AnyKinMeasureLinComb ThoraxThighRhythmComb = {
+      AnyKinMeasureOrg Org = {
+        AnySphericalJoint &rhip1 = Main.Model.BodyModel.Right.Leg.Jnt.Hip;
+        AnySphericalJoint &lhip2 = Main.Model.BodyModel.Left.Leg.Jnt.Hip;
+        AnyKinRotational PelvisThorax = {
+          AnyRefFrame &Thorax = Main.Model.BodyModel.Trunk.SegmentsThorax.ThoraxSeg;
+          AnyRefFrame &Pelvis = Main.Model.BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
+          Type = RotAxesAngles;
+        };
+        MeasureOrganizer = {2, 5, 6};
+      };
+      OutDim = 1;
+      Coef = {{0.5, 0.5, 3.0}};
+      Const = {0};
+    };
+  };
+  
+  AnyFolder Right = {
+    
+    // ************************************
+    // Drivers for the right arm
+    // ************************************
+    
+    //Sterno clavicular joint driver
+    AnyKinEqSimpleDriver SCDriverRight ={
+      AnyKinMeasure& ref1 =....BodyModel.Interface.Right.SternoClavicularProtraction;
+      AnyKinMeasure& ref2 =....BodyModel.Interface.Right.SternoClavicularElevation;
+      DriverPos = pi/180*{
+        ..JntPos.Right.SternoClavicularProtraction,
+        ..JntPos.Right.SternoClavicularElevation
+      };
+      DriverVel = {
+        ..JntVel.Right.SternoClavicularProtraction,
+        ..JntVel.Right.SternoClavicularElevation
+      };
+      Reaction.Type={Off,Off};
+    };
+    
+    //Glenohumeral joint 
+    AnyKinEqSimpleDriver GHDriverRight={
+      AnyKinMeasure& ref1 =....BodyModel.Interface.Right.GlenohumeralAbduction;
+      AnyKinMeasure& ref2 =....BodyModel.Interface.Right.GlenohumeralFlexion;
+      AnyKinMeasure& ref3 =....BodyModel.Interface.Right.GlenohumeralExternalRotation;
+      
+      DriverPos=pi/180*{
+        ..JntPos.Right.GlenohumeralAbduction,  //GH joint
+        ..JntPos.Right.GlenohumeralFlexion,  //GH joint
+        ..JntPos.Right.GlenohumeralExternalRotation  //GH joint
+      };
+      DriverVel = pi/180*{
+        ..JntVel.Right.GlenohumeralAbduction,  //GH joint
+        ..JntVel.Right.GlenohumeralFlexion,  //GH joint
+        ..JntVel.Right.GlenohumeralExternalRotation  //GH joint
+      };    
+      Reaction.Type={Off,Off,Off};
+    };
+    
+    //Elbow flexion driver  
+    AnyKinEqSimpleDriver ElbowFlexionDriverRight={
+      AnyKinMeasureOrg  &Elbow =....BodyModel.Interface.Right.ElbowFlexion;
+      DriverPos=pi/180*{..JntPos.Right.ElbowFlexion};  
+      DriverVel = pi/180*{..JntVel.Right.ElbowFlexion};  
+      Reaction.Type={Off};
+    };    
+    
+    //Elbow pronation driver
+    AnyKinEqSimpleDriver ElbowPronationDriverRight={
+      AnyKinMeasure& Elbow =....BodyModel.Interface.Right.ElbowPronation;
+      DriverPos = pi/180*{..JntPos.Right.ElbowPronation };  
+      
+      DriverVel=pi/180*{..JntVel.Right.ElbowPronation };  
+      Reaction.Type={Off};
+    };
+    
+    //Wrist driver 
+    AnyKinEqSimpleDriver WristDriverRight ={
+      AnyKinMeasure& ref1 =....BodyModel.Interface.Right.WristFlexion;
+      AnyKinMeasure& ref2 =....BodyModel.Interface.Right.WristAbduction;
+      DriverPos = pi/180*{
+        ..JntPos.Right.WristFlexion,
+        ..JntPos.Right.WristAbduction
+      };
+      
+      DriverVel = pi/180*{
+        ..JntVel.Right.WristFlexion,
+        ..JntVel.Right.WristAbduction};
+      Reaction.Type={Off,Off};
+    };
+    
+  }; //End Right
+  
+  AnyFolder Left = {
+    
+    // ************************************
+    // Drivers for the left arm
+    // ************************************
+    
+    //Sterno clavicular joint driver
+    AnyKinEqSimpleDriver SCDriverLeft ={
+      AnyKinMeasure& ref1 =....BodyModel.Interface.Left.SternoClavicularProtraction;
+      AnyKinMeasure& ref2 =....BodyModel.Interface.Left.SternoClavicularElevation;
+      
+      DriverPos = pi/180*{
+        ..JntPos.Left.SternoClavicularProtraction,
+        ..JntPos.Left.SternoClavicularElevation
+      };
+      
+      DriverVel = pi/180*{
+        ..JntVel.Left.SternoClavicularProtraction,
+        ..JntVel.Left.SternoClavicularElevation
+      };
+      
+      Reaction.Type={Off,Off};
+    };
+    
+    AnyKinEqSimpleDriver GHDriverLeft={
+      AnyKinMeasure& ref1 =....BodyModel.Interface.Left.GlenohumeralAbduction;
+      AnyKinMeasure& ref2 =....BodyModel.Interface.Left.GlenohumeralFlexion;
+      AnyKinMeasure& ref3 =....BodyModel.Interface.Left.GlenohumeralExternalRotation;
+      DriverPos=pi/180*{
+        ..JntPos.Left.GlenohumeralAbduction,  //GH joint
+        ..JntPos.Left.GlenohumeralFlexion,  //GH joint
+        ..JntPos.Left.GlenohumeralExternalRotation  //GH joint
+      };    
+      DriverVel = pi/180*{
+        ..JntVel.Left.GlenohumeralAbduction,  //GH joint
+        ..JntVel.Left.GlenohumeralFlexion,  //GH joint
+        ..JntVel.Left.GlenohumeralExternalRotation  //GH joint
+      };    
+      Reaction.Type={Off,Off,Off};
+    };
+    
+    //Elbow flexion driver
+    AnyKinEqSimpleDriver ElbowFEDriverLeft={
+      AnyKinMeasureOrg  &Elbow =....BodyModel.Interface.Left.ElbowFlexion;
+      DriverPos=pi/180*{..JntPos.Left.ElbowFlexion};  
+      DriverVel = pi/180*{..JntVel.Left.ElbowFlexion};  
+      Reaction.Type={Off};
+    };
+
+    //Elbow pronation driver 
+    AnyKinEqSimpleDriver ElbowPSDriverLeft={
+      AnyKinMeasure& Elbow =....BodyModel.Interface.Left.ElbowPronation;
+      DriverPos= pi/180*{..JntPos.Left.ElbowPronation };  
+      DriverVel = pi/180*{..JntVel.Left.ElbowPronation };  
+      Reaction.Type={Off};
+    };
+    //Wrist driver
+    AnyKinEqSimpleDriver WristDriverLeft ={
+      AnyKinMeasure& ref1 =....BodyModel.Interface.Left.WristFlexion;
+      AnyKinMeasure& ref2 =....BodyModel.Interface.Left.WristAbduction;
+      DriverPos = pi/180*{
+        ..JntPos.Left.WristFlexion,
+        ..JntPos.Left.WristAbduction};
+      
+      DriverVel = pi/180*{
+        ..JntVel.Left.WristFlexion,
+        ..JntVel.Left.WristAbduction};
+      Reaction.Type={Off,Off};
+    };
+  }; //End Left    
+}; // Drivers 
+