--- a
+++ b/Tests/ModelUtilities/test_rhythmclass.any
@@ -0,0 +1,324 @@
+#include "../libdef.any"
+
+
+Main = {
+
+
+  AnyOperationSequence RunTest = {
+     AnyOperation& s1 = Main.study1.Kinematics;
+     AnyOperation& s2 = Main.study2.Kinematics;
+     AnyOperation& s3 = Main.study3.Kinematics;
+     AnyOperation& s4 = Main.study4.Kinematics;
+     AnyOperation& s5 = Main.study5.Kinematics; 
+     AnyOperation& s6 = Main.study6.Kinematics; 
+  };
+  
+  AnyFolder Rhythms = 
+  {
+     // With input with measure organizer
+     RhythmDriverLinear r1 =
+     {
+       RhythmCoefficients = {0.9, 0.9, 0.2, 0.9};
+       
+       Measures.Input = {
+          AnyKinMeasure& jg = Main.Model.j_ground;
+          AnyKinMeasure& j1 = Main.Model.j1;
+          AnyKinMeasure& j2 = Main.Model.j2;
+          AnyKinMeasure& j3 = Main.Model.j3;
+          MeasureOrganizer = {2,5,8,11};
+       };
+     
+     };
+     // Simple input without a measure organizer
+     RhythmDriverLinear r2 =
+     {
+       RhythmCoefficients = {0.9, 0.9, 0, 0.9};
+       Measures.Input = {
+          AnyKinMeasureOrg ZRot = {
+              AnyKinMeasure& jg = Main.Model.j_ground;
+              AnyKinMeasure& j1 = Main.Model.j1;
+              AnyKinMeasure& j2 = Main.Model.j2;
+              AnyKinMeasure& j3 = Main.Model.j3;
+              MeasureOrganizer = {2,5,8,11};
+         };
+       };
+     };
+   
+     // Explicit formulation with respect to one of the DOF and zero weights.
+     RhythmDriverLinear r3(RELATIVE_TO_DOF=1) =
+     {
+       RhythmCoefficients = {0.9, 0.9, 0, 0.9};
+       Measures.Input = {
+          AnyKinMeasureOrg ZRot = {
+              AnyKinMeasure& jg = Main.Model.j_ground;
+              AnyKinMeasure& j1 = Main.Model.j1;
+              AnyKinMeasure& j2 = Main.Model.j2;
+              AnyKinMeasure& j3 = Main.Model.j3;
+              MeasureOrganizer = {2,5,8,11};
+         };
+       };
+     };
+     
+     
+     // Two way rhythm dirver with implicit formulation
+     RhythmDriverBiLinear r4(NDIM=4) =
+     {
+       RhythmCoefficients = {0.2, 1, 1, 0.2};
+       RhythmCoefficientsNegative = {0.2, 0.2, 1, 1};
+
+       Measures.Input = {
+          AnyKinMeasureOrg ZRot = {
+              AnyKinMeasure& jg = Main.Model.j_ground;
+              AnyKinMeasure& j1 = Main.Model.j1;
+              AnyKinMeasure& j2 = Main.Model.j2;
+              AnyKinMeasure& j3 = Main.Model.j3;
+              MeasureOrganizer = {2,5,8,11};
+         };
+       };
+     };
+     
+     // Two way rhythm dirver with explicit formulation
+     RhythmDriverBiLinear r5(NDIM=4, RELATIVE_TO_DOF=2) =
+     {
+       RhythmCoefficients = {0.1, 1, 1, 0.1};
+       RhythmCoefficientsNegative = {0.1, 0.1, 1, 1};
+       
+       TransitionInterval = 0.5;
+       
+       Measures.Input = {
+          AnyKinMeasureOrg ZRot = {
+              AnyKinMeasure& jg = Main.Model.j_ground;
+              AnyKinMeasure& j1 = Main.Model.j1;
+              AnyKinMeasure& j2 = Main.Model.j2;
+              AnyKinMeasure& j3 = Main.Model.j3;
+              MeasureOrganizer = {2,5,8,11};
+         };
+       };
+     };
+     
+     // Two way rhythm dirver with explicit formulation and input measure organizer
+     RhythmDriverBiLinear r6(NDIM=4, RELATIVE_TO_DOF=2) =
+     {
+       RhythmCoefficients = {0.0001, 1, 1, 0.0001};
+       RhythmCoefficientsNegative = {0.0001, 0.0001, 1, 1};
+       
+       TransitionInterval = 0.1;
+       
+       Measures.Input = {
+          AnyKinMeasureOrg ZRot = {
+              AnyKinMeasure& jg = Main.Model.j_ground;
+              AnyKinMeasure& j1 = Main.Model.j1;
+              AnyKinMeasure& j2 = Main.Model.j2;
+              AnyKinMeasure& j3 = Main.Model.j3;
+         };
+         MeasureOrganizer = {2,5,8,11};
+       };
+     };
+     
+  
+  };
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+
+  AnyKinStudy study1 = {
+     tEnd=1;
+     nStep=50;
+     AnyFolder& Model = Main.Model;
+     AnyFolder& Rhythm = Main.Rhythms.r1;
+  };
+  
+  AnyKinStudy study2 = {
+     tEnd=1;
+     nStep=50;
+     AnyFolder& Model = Main.Model;
+     AnyFolder& Rhythm = Main.Rhythms.r2;
+  };
+  
+  AnyKinStudy study3 = {
+     tEnd=1;
+     nStep=50;
+     AnyFolder& Model = Main.Model;
+     AnyFolder& Rhythm = Main.Rhythms.r3;
+  };
+  
+  AnyKinStudy study4 = {
+     tEnd=1;
+     nStep=50;
+     AnyFolder& Model = Main.Model;
+     AnyFolder& Rhythm = Main.Rhythms.r4;
+  };
+  
+  AnyKinStudy study5 = {
+     tEnd=1;
+     nStep=50;
+     AnyFolder& Model = Main.Model;
+     AnyFolder& Rhythm = Main.Rhythms.r5;
+  };
+  
+  AnyKinStudy study6 = {
+     tEnd=1;
+     nStep=50;
+     AnyFolder& Model = Main.Model;
+     AnyFolder& Rhythm = Main.Rhythms.r6;
+  };
+
+  
+  AnyFolder Model = {
+    
+    AnyFixedRefFrame Ground = {
+      viewRefFrame.Visible=On;
+      
+    };
+    
+    
+    AnyKinMotion EndDriver = {
+      AnyKinMeasureOrg ref  = {
+        AnyKinMeasure& ref = Main.Model.Measures.EndMeasure;
+        MeasureOrganizer = {2};
+      };
+      DriverPos0 = {-1};
+      DriverVel0 = {2};
+    };
+    
+    
+
+    
+    AnySeg s1 = {
+      r0 = 1*{3,0,0}-{1.5,0,0};
+      viewInertia.Visible=On;
+      Mass = 2;
+      Jii = {0.05, 1, 1};
+      AnyRefNode n1 = {sRel={-1.5,0,0};viewRefFrame.Visible=On;};
+      AnyRefNode n2 = {sRel={1.5,0,0};viewRefFrame.Visible=On;};
+    };
+    AnySeg s2 = {
+      r0 = 2*{3,0,0}-{1.5,0,0};
+      viewInertia.Visible=On;
+      Mass = 2;
+      Jii = {0.05, 1, 1};
+      AnyRefNode n1 = {sRel={-1.5,0,0};viewRefFrame.Visible=On;};
+      AnyRefNode n2 = {sRel={1.5,0,0};viewRefFrame.Visible=On;};
+    };
+    AnySeg s3 = {
+      r0 = 3*{3,0,0}-{1.5,0,0};
+      viewInertia.Visible=On;
+      Mass = 2;
+      Jii = {0.05, 1, 1};
+      AnyRefNode n1 = {sRel={-1.5,0,0};viewRefFrame.Visible=On;};
+      AnyRefNode n2 = {sRel={1.5,0,0};viewRefFrame.Visible=On;};
+    };
+    AnySeg s4 = {
+      r0 = 4*{3,0,0}-{1.5,0,0};
+      viewInertia.Visible=On;
+      Mass = 2;
+      Jii = {0.05, 1, 1};
+      AnyRefNode n1 = {sRel={-1.5,0,0};viewRefFrame.Visible=On;};
+      AnyRefNode n2 = {sRel={1.5,0,0};viewRefFrame.Visible=On;};
+    };
+    
+    AnySphericalJoint j_ground ={
+      viewJoint.Visible= On;
+      AnyRefFrame& r1 = .Ground;
+      AnyRefFrame& r2 = .s1.n1;
+      Orientation.Axis1 = .Measures.EndMeasure.Axis1;
+      Orientation.Axis2 = .Measures.EndMeasure.Axis2;
+      Orientation.Axis3 = .Measures.EndMeasure.Axis3;
+      Orientation.Type = .Measures.EndMeasure.Type;
+    };
+    AnySphericalJoint j1 ={
+      viewJoint.Visible= On;
+      AnyRefFrame& r1 = .s1.n2;
+      AnyRefFrame& r2 = .s2.n1;
+      Orientation.Axis1 = .Measures.EndMeasure.Axis1;
+      Orientation.Axis2 = .Measures.EndMeasure.Axis2;
+      Orientation.Axis3 = .Measures.EndMeasure.Axis3;
+      Orientation.Type = .Measures.EndMeasure.Type;
+    };
+    AnySphericalJoint j2 ={
+      viewJoint.Visible= On;
+      AnyRefFrame& r1 = .s2.n2;
+      AnyRefFrame& r2 = .s3.n1;
+      Orientation.Axis1 = .Measures.EndMeasure.Axis1;
+      Orientation.Axis2 = .Measures.EndMeasure.Axis2;
+      Orientation.Axis3 = .Measures.EndMeasure.Axis3;
+      Orientation.Type = .Measures.EndMeasure.Type;
+    };
+    AnySphericalJoint j3 ={
+      viewJoint.Visible= On;
+      AnyRefFrame& r1 = .s3.n2;
+      AnyRefFrame& r2 = .s4.n1;
+      Orientation.Axis1 = .Measures.EndMeasure.Axis1;
+      Orientation.Axis2 = .Measures.EndMeasure.Axis2;
+      Orientation.Axis3 = .Measures.EndMeasure.Axis3;
+      Orientation.Type = .Measures.EndMeasure.Type;
+    };
+    
+    AnyFolder Measures = {
+      AnyKinRotational EndMeasure = {
+        AnyRefFrame& r1 = ..Ground;
+        AnyRefFrame& r2 = ..s4.n2;
+        //               Axis1 =x;
+        //               Axis2 =y;
+        //               Axis3= z;
+        //              Type = RotAxesAngles;
+        Type=RotVector;
+      };
+      
+      AnyKinMeasureOrg yrot = {
+        AnyKinMeasureOrg joints = {
+          AnyKinMeasure& jg = ...j_ground;
+          AnyKinMeasure& j1 = ...j1;
+          AnyKinMeasure& j2 = ...j2;
+          AnyKinMeasure& j3 = ...j3;       
+        };
+        MeasureOrganizer = {1,4,7,10};
+      };
+      AnyKinMeasureOrg xrot = {
+        AnyKinMeasureOrg joints = {
+          AnyKinMeasure& jg = ...j_ground;
+          AnyKinMeasure& j1 = ...j1;
+          AnyKinMeasure& j2 = ...j2;
+          AnyKinMeasure& j3 = ...j3;       
+        };
+        MeasureOrganizer = {0,3,6,9};
+      };
+      AnyKinMeasureOrg zrot = {
+        AnyKinMeasureOrg joints = {
+          AnyKinMeasure& jg = ...j_ground;
+          AnyKinMeasure& j1 = ...j1;
+          AnyKinMeasure& j2 = ...j2;
+          AnyKinMeasure& j3 = ...j3;       
+        };
+        MeasureOrganizer = {2,5,8,11};
+      };
+      
+    };
+    AnyKinEq FixYRot = {
+      AnyKinMeasureOrg& ref = .Measures.yrot;
+    };
+    AnyKinEq FixXRot = {
+      AnyKinMeasureOrg& ref = .Measures.xrot;
+    };
+    //       AnyKinEq FixZRot = {
+    //         AnyKinMeasureOrg& ref = .Measures.zrot;
+    //       };
+    
+    
+  };
+
+
+
+
+
+
+
+
+};
\ No newline at end of file