Kaynağa Gözat

made the hierarchical simulator somewhat easier to understand

Simon Van Mierlo 9 yıl önce
ebeveyn
işleme
ed9766666e

Dosya farkı çok büyük olduğundan ihmal edildi
+ 3 - 3
debugging_fsa_cbd_composition/cbdsimulator/HierarchicalSimulator/plot.html


+ 33 - 54
debugging_fsa_cbd_composition/cbdsimulator/HierarchicalSimulator/sim_bigstep.xml

@@ -85,7 +85,7 @@
                     <transition target="../Paused" event="BigStep.Finished" />
                 </state>
             </state>
-            <state id="SmallStepState" initial="Uninitialized">
+            <state id="ChildState" initial="Uninitialized">
                 <state id="Uninitialized">
                     <transition event="SmallStep.Initialized" target="../Initialized" />
                 </state>
@@ -97,34 +97,9 @@
                     </transition>
                 </state>
             </state>
-            <state id="Initializer" initial="Started">
-                <state id="Started">
-                    <transition target="../Initialized">
-                        <script>
-                        <![CDATA[
-                            self.initialize()
-                        ]]>
-                        </script>
-                    </transition>
-                </state>
-                <state id="Initialized">
-                    <transition target="../InitializeDebugger" />
-                </state>
-                <state id="InitializeDebugger">
-                    <transition target="../Waiting">
-                        <script>
-                        <![CDATA[
-                            self.initializeDebugger()
-                        ]]>
-                        </script>
-                        <raise event="BigStep.Initialized" scope="narrow" target="'parent'" />
-                    </transition>
-                </state>
-                <state id="SettleBeforeWaiting">
-                    <transition target="../Waiting" after="self.sccd_yield()" />
-                </state>
+            <state id="Initializer" initial="Waiting">
                 <state id="Waiting">
-                    <transition target="../CreatingChildSimulator" cond="INSTATE('../../ModeSelector/Running') and INSTATE('../../SmallStepState/Uninitialized') and not self.endCondition()">
+                    <transition target="../CreatingChildSimulator" cond="INSTATE('../../ModeSelector/Running') and INSTATE('../../ChildState/Uninitialized') and not self.endCondition()">
                         <raise event="create_instance" scope="cd">
                             <parameter expr="'child_simulator'" />
                             <parameter expr="'CBDSimulator_SmallStep'" />
@@ -148,48 +123,43 @@
                     <transition target="../Running" event="SmallStep.Initialized" />
                 </state>
                 <state id="Running">
-                    <transition target="../SettleBeforeWaiting" event="SmallStep.Finished">
-                        <parameter name="new_current_component_idx" />
-                        <parameter name="new_state" />
+                    <transition target="../SettleBeforeWaiting" event="SmallStep.Finished" />
+                </state>
+                <state id="SettleBeforeWaiting">
+                    <transition target="../Waiting" after="self.sccd_yield()" />
+                </state>
+            </state>
+            <state id="SimulationFlow" initial="Started">
+                <state id="Started">
+                    <transition target="../Initialized">
                         <script>
                         <![CDATA[
-                            self.current_component_idx = new_current_component_idx
-                            self.state = new_state
+                            self.initialize()
                         ]]>
                         </script>
                     </transition>
                 </state>
-            </state>
-            <state id="SimulationFlow" initial="Initializing">
-                <state id="Initializing">
-                    <!-- We make sure we are initialized -->
-                    <transition target="../Waiting" cond="INSTATE('../../Initializer/Waiting')" />
+                <state id="Initialized">
+                    <transition target="../InitializeDebugger" />
                 </state>
-                <state id="Waiting">
-                    <transition target="../CheckTermination" cond="INSTATE('../../ModeSelector/Running')" />
-                    <!-- in case a small step triggers the end condition of the simulation -->
-                    <!-- TODO: Probably we don't need this anymore, since the simulation will always coordinate big steps... -->
-                    <transition target="../Stopped" cond="self.endCondition()">
+                <state id="InitializeDebugger">
+                    <transition target="../Waiting">
                         <script>
                         <![CDATA[
-                            # print '>>> big step executed <<<'
-                            self.finalize()
+                            self.initializeDebugger()
                         ]]>
                         </script>
-                        <raise event="BigStep.Finished" />
-                        <raise event="BigStep.Finished" scope="narrow" target="'parent'">
-                            <parameter expr="self.clock" />
-                            <parameter expr="self.iteration" />
-                            <parameter expr="self.time_next" />
-                            <parameter expr="self.state" />
-                        </raise>
+                        <raise event="BigStep.Initialized" scope="narrow" target="'parent'" />
                     </transition>
                 </state>
+                <state id="Waiting">
+                    <transition target="../CheckTermination" cond="INSTATE('../../ModeSelector/Running')" />
+                </state>
                 <state id="SettleBeforeCheckTermination">
                     <transition target="../CheckTermination" after="self.sccd_yield()" />
                 </state>
                 <state id="CheckTermination">
-                    <transition target="../Executing" cond="(INSTATE('../../ModeSelector/Running/Continuous') or INSTATE('../../ModeSelector/Running/SmallStep')) and INSTATE('../../SmallStepState/Initialized') and not self.endCondition()">
+                    <transition target="../Executing" cond="(INSTATE('../../ModeSelector/Running/Continuous') or INSTATE('../../ModeSelector/Running/SmallStep')) and INSTATE('../../ChildState/Initialized') and not self.endCondition()">
                         <raise event="SmallStep.Execute" scope="narrow" target="'child_simulator'" />
                     </transition>
                     <transition target="../Stopped" cond="self.endCondition()">
@@ -209,7 +179,16 @@
                     </transition>
                 </state>
                 <state id="Executing">
-                    <transition target="../SettleBeforeCheckTermination" event="SmallStep.Finished" />
+                    <transition target="../SettleBeforeCheckTermination" event="SmallStep.Finished">
+                        <parameter name="new_current_component_idx" />
+                        <parameter name="new_state" />
+                        <script>
+                        <![CDATA[
+                            self.current_component_idx = new_current_component_idx
+                            self.state = new_state
+                        ]]>
+                        </script>
+                    </transition>
                 </state>
                 <state id="Stopped" />
             </state>

+ 59 - 6
debugging_fsa_cbd_composition/cbdsimulator/HierarchicalSimulator/sim_coordinator.xml

@@ -25,6 +25,28 @@
                             self.realtime_scale = float(realtime_scale)
                         </script>
                     </transition>
+                    <transition target="." event="BigStep.Finished">
+                        <parameter name="clock" />
+                        <parameter name="iteration" />
+                        <parameter name="time_next" />
+                        <parameter name="state" />
+                        <raise event="BigStep.Finished" port="user_output" />
+                        <raise event="State" port="user_output">
+                            <parameter expr="clock / 1000.0" />
+                            <!--parameter expr="iteration" /-->
+                            <!--parameter expr="time_next" /-->
+                            <!--parameter expr="state" /-->
+                        </raise>
+                    </transition>
+                    <transition target="." event="Simulation.Finished">
+                        <parameter name="clock" />
+                        <parameter name="state" />
+                        <raise event="Simulation.Finished" port="user_output" />
+                        <raise event="State" port="user_output">
+                            <parameter expr="clock / 1000.0" />
+                            <!--parameter expr="state" /-->
+                        </raise>
+                    </transition>
                 </state>
                 <state id="Running" initial="Continuous">
                     <state id="Continuous">
@@ -82,6 +104,15 @@
                                 <!--parameter expr="state" /-->
                             </raise>
                         </transition>
+                        <transition target="../../Stopped" event="Simulation.Finished">
+                            <parameter name="clock" />
+                            <parameter name="state" />
+                            <raise event="Simulation.Finished" port="user_output" />
+                            <raise event="State" port="user_output">
+                                <parameter expr="clock / 1000.0" />
+                                <!--parameter expr="state" /-->
+                            </raise>
+                        </transition>
                     </state>
                     <state id="SmallStep">
                         <transition target="../../Paused" event="SmallStep.Finished">
@@ -93,6 +124,28 @@
                                 <!--parameter expr="state" /-->
                             </raise>
                         </transition>
+                        <transition target="../../Paused" event="BigStep.Finished">
+                            <parameter name="clock" />
+                            <parameter name="iteration" />
+                            <parameter name="time_next" />
+                            <parameter name="state" />
+                            <raise event="BigStep.Finished" port="user_output" />
+                            <raise event="State" port="user_output">
+                                <parameter expr="clock / 1000.0" />
+                                <!--parameter expr="iteration" /-->
+                                <!--parameter expr="time_next" /-->
+                                <!--parameter expr="state" /-->
+                            </raise>
+                        </transition>
+                        <transition target="../../Stopped" event="Simulation.Finished">
+                            <parameter name="clock" />
+                            <parameter name="state" />
+                            <raise event="Simulation.Finished" port="user_output" />
+                            <raise event="State" port="user_output">
+                                <parameter expr="clock / 1000.0" />
+                                <!--parameter expr="state" /-->
+                            </raise>
+                        </transition>
                     </state>
                     <transition target="../Paused" event="Simulation.Finished">
                         <parameter name="clock" />
@@ -131,7 +184,7 @@
                 </state>
                 <state id="Stopped" />
             </state>
-            <state id="SimulationState" initial="Uninitialized">
+            <state id="ChildState" initial="Uninitialized">
                 <state id="Uninitialized">
                     <transition event="Simulation.Initialized" target="../Initialized" />
                 </state>
@@ -146,7 +199,7 @@
             <state id="Initializer" initial="Waiting">
                 <state id="Waiting">
                     <!-- always initialize an uninitialized simulation -->
-                    <transition target="../CreatingChildSimulator" cond="INSTATE('../../SimulationState/Uninitialized')">
+                    <transition target="../CreatingChildSimulator" cond="INSTATE('../../ChildState/Uninitialized')">
                         <raise event="create_instance" scope="cd">
                             <parameter expr="'child_simulator'" />
                             <parameter expr="'CBDSimulator_Simulation'" />
@@ -171,18 +224,18 @@
                     <transition target="../Paused" after="self.sccd_yield()" />
                 </state>
                 <state id="Paused">
-                    <transition target="../Executing" cond="INSTATE('../../ModeSelector/Running/Continuous') and INSTATE('../../SimulationState/Initialized')">
+                    <transition target="../Executing" cond="INSTATE('../../ModeSelector/Running/Continuous') and INSTATE('../../ChildState/Initialized')">
                         <raise event="Simulation.Execute" scope="narrow" target="'child_simulator'" />
                     </transition>
-                    <transition target="../Executing" cond="INSTATE('../../ModeSelector/Running/Realtime') and INSTATE('../../SimulationState/Initialized')">
+                    <transition target="../Executing" cond="INSTATE('../../ModeSelector/Running/Realtime') and INSTATE('../../ChildState/Initialized')">
                         <raise event="Simulation.ExecuteRealtime" scope="narrow" target="'child_simulator'">
                             <parameter expr="self.realtime_scale" />
                         </raise>
                     </transition>
-                    <transition target="../Executing" cond="INSTATE('../../ModeSelector/Running/BigStep') and INSTATE('../../SimulationState/Initialized')">
+                    <transition target="../Executing" cond="INSTATE('../../ModeSelector/Running/BigStep') and INSTATE('../../ChildState/Initialized')">
                         <raise event="BigStep.Execute" scope="narrow" target="'child_simulator'" />
                     </transition>
-                    <transition target="../Executing" cond="INSTATE('../../ModeSelector/Running/SmallStep') and INSTATE('../../SimulationState/Initialized')">
+                    <transition target="../Executing" cond="INSTATE('../../ModeSelector/Running/SmallStep') and INSTATE('../../ChildState/Initialized')">
                         <raise event="SmallStep.Execute" scope="narrow" target="'child_simulator'" />
                     </transition>
                 </state>

+ 51 - 59
debugging_fsa_cbd_composition/cbdsimulator/HierarchicalSimulator/sim_simulation.xml

@@ -186,6 +186,18 @@
                             self.realtime_start_time = accurate_time.time() - (self.clock / self.realtime_scale)
                         </script>
                     </transition>
+                    <transition target="." event="BigStep.Finished">
+                        <parameter name="clock" />
+                        <parameter name="iteration" />
+                        <parameter name="time_next" />
+                        <parameter name="state" />
+                        <raise event="BigStep.Finished" scope="narrow" target="'parent'">
+                            <parameter expr="clock" />
+                            <parameter expr="iteration" />
+                            <parameter expr="time_next" />
+                            <parameter expr="state" />
+                        </raise>
+                   </transition>
                 </state>
                 <state id="Running" initial="Continuous">
                     <state id="Continuous">
@@ -240,7 +252,7 @@
                     </transition>
                 </state>
             </state>
-            <state id="BigStepState" initial="Uninitialized">
+            <state id="ChildState" initial="Uninitialized">
                 <state id="Uninitialized">
                     <transition event="BigStep.Initialized" target="../Initialized" />
                 </state>
@@ -252,34 +264,9 @@
                     </transition>
                 </state>
             </state>
-            <state id="Initializer" initial="Started">
-                <state id="Started">
-                    <transition target="../Initialized">
-                        <script>
-                        <![CDATA[
-                            self.initialize()
-                        ]]>
-                        </script>
-                    </transition>
-                </state>
-                <state id="Initialized">
-                    <transition target="../InitializeDebugger" />
-                </state>
-                <state id="InitializeDebugger">
-                    <transition target="../Waiting">
-                        <script>
-                        <![CDATA[
-                            self.initializeDebugger()
-                        ]]>
-                        </script>
-                        <raise event="Simulation.Initialized" scope="narrow" target="'parent'" />
-                    </transition>
-                </state>
-                <state id="SettleBeforeWaiting">
-                    <transition target="../Waiting" after="self.sccd_yield()" />
-                </state>
+            <state id="Initializer" initial="Waiting">
                 <state id="Waiting">
-                    <transition target="../CreatingChildSimulator" cond="INSTATE('../../ModeSelector/Running') and INSTATE('../../BigStepState/Uninitialized') and not self.endCondition()">
+                    <transition target="../CreatingChildSimulator" cond="INSTATE('../../ModeSelector/Running') and INSTATE('../../ChildState/Uninitialized') and not self.endCondition()">
                         <raise event="create_instance" scope="cd">
                             <parameter expr="'child_simulator'" />
                             <parameter expr="'CBDSimulator_BigStep'" />
@@ -303,46 +290,38 @@
                     <transition target="../Running" event="BigStep.Initialized" />
                 </state>
                 <state id="Running">
-                    <transition target="../SettleBeforeWaiting" event="BigStep.Finished">
-                        <parameter name="clock" />
-                        <parameter name="iteration" />
-                        <parameter name="time_next" />
-                        <parameter name="state" />
+                    <transition target="../SettleBeforeWaiting" event="BigStep.Finished" />
+                </state>
+                <state id="SettleBeforeWaiting">
+                    <transition target="../Waiting" after="self.sccd_yield()" />
+                </state>
+            </state>
+            <state id="SimulationFlow" initial="Started">
+                <state id="Started">
+                    <transition target="../Initialized">
                         <script>
                         <![CDATA[
-                            self.clock = clock
-                            self.iteration = iteration
-                            self.time_next = time_next
-                            self.state = state
+                            self.initialize()
                         ]]>
                         </script>
                     </transition>
                 </state>
-            </state>
-            <state id="SimulationFlow" initial="Initializing">
-                <state id="Initializing">
-                    <!-- we make sure we are initialized -->
-                    <!-- TODO: Probably it's best if we move the initialization states to the SimulationFlow state. -->
-                    <transition target="../Waiting" cond="INSTATE('../../Initializer/Waiting')" />
+                <state id="Initialized">
+                    <transition target="../InitializeDebugger" />
                 </state>
-                <state id="Waiting">
-                    <transition target="../CheckTermination" cond="INSTATE('../../ModeSelector/Running')" />
-                    <!-- in case a big step triggers the end condition of the simulation -->
-                    <!-- TODO: Probably we don't need this anymore, since the simulation will always coordinate big steps... -->
-                    <transition target="../Stopped" cond="self.endCondition()">
+                <state id="InitializeDebugger">
+                    <transition target="../Waiting">
                         <script>
                         <![CDATA[
-                            # print 'simulation executed'
-                            self.finalize()
+                            self.initializeDebugger()
                         ]]>
                         </script>
-                        <raise event="Simulation.Finished" />
-                        <raise event="Simulation.Finished" scope="narrow" target="'parent'">
-                            <parameter expr="self.clock" />
-                            <parameter expr="self.state" />
-                        </raise>
+                        <raise event="Simulation.Initialized" scope="narrow" target="'parent'" />
                     </transition>
                 </state>
+                <state id="Waiting">
+                    <transition target="../CheckTermination" cond="INSTATE('../../ModeSelector/Running')" />
+                </state>
                 <state id="SettleBeforeCheckTermination">
                     <transition target="../CheckTermination" after="self.sccd_yield()" />
                     <transition target="../CheckTermination" cond="INSTATE('../../ModeSelector/Paused')">
@@ -353,13 +332,13 @@
                     </transition>
                 </state>
                 <state id="CheckTermination">
-                    <transition target="../Executing" cond="(INSTATE('../../ModeSelector/Running/Continuous') or INSTATE('../../ModeSelector/Running/BigStep')) and INSTATE('../../BigStepState/Initialized') and not self.endCondition()">
+                    <transition target="../Executing" cond="(INSTATE('../../ModeSelector/Running/Continuous') or INSTATE('../../ModeSelector/Running/BigStep')) and INSTATE('../../ChildState/Initialized') and not self.endCondition()">
                         <raise event="BigStep.Execute" scope="narrow" target="'child_simulator'" />
                     </transition>
-                    <transition target="../Executing" cond="INSTATE('../../ModeSelector/Running/SmallStep') and INSTATE('../../BigStepState/Initialized') and not self.endCondition()">
+                    <transition target="../Executing" cond="INSTATE('../../ModeSelector/Running/SmallStep') and INSTATE('../../ChildState/Initialized') and not self.endCondition()">
                         <raise event="SmallStep.Execute" scope="narrow" target="'child_simulator'" />
                     </transition>
-                    <transition target="../WaitingRealtime" cond="INSTATE('../../ModeSelector/Running/Realtime') and INSTATE('../../BigStepState/Initialized') and not self.endCondition()" />
+                    <transition target="../WaitingRealtime" cond="INSTATE('../../ModeSelector/Running/Realtime') and INSTATE('../../ChildState/Initialized') and not self.endCondition()" />
                     <transition target="../Stopped" cond="self.endCondition()">
                         <script>
                         <![CDATA[
@@ -394,7 +373,20 @@
                     </transition>
                 </state>
                 <state id="Executing">
-                    <transition target="../SettleBeforeCheckTermination" event="BigStep.Finished" />
+                    <transition target="../SettleBeforeCheckTermination" event="BigStep.Finished">
+                        <parameter name="clock" />
+                        <parameter name="iteration" />
+                        <parameter name="time_next" />
+                        <parameter name="state" />
+                        <script>
+                        <![CDATA[
+                            self.clock = clock
+                            self.iteration = iteration
+                            self.time_next = time_next
+                            self.state = state
+                        ]]>
+                        </script>
+                   </transition>
                 </state>
                 <state id="Stopped" />
             </state>

+ 32 - 51
debugging_fsa_cbd_composition/cbdsimulator/HierarchicalSimulator/sim_smallstep.xml

@@ -60,7 +60,7 @@
                     <transition target="../Paused" event="SmallStep.Finished" />
                 </state>
             </state>
-            <state id="BlockState" initial="Uninitialized">
+            <state id="ChildState" initial="Uninitialized">
                 <state id="Uninitialized">
                     <transition event="Block.Initialized" target="../Initialized" />
                 </state>
@@ -72,34 +72,9 @@
                     </transition>
                 </state>
             </state>
-            <state id="Initializer" initial="Started">
-                <state id="Started">
-                    <transition target="../Initialized">
-                        <script>
-                        <![CDATA[
-                            self.initialize()
-                        ]]>
-                        </script>
-                    </transition>
-                </state>
-                <state id="Initialized">
-                    <transition target="../InitializeDebugger" />
-                </state>
-                <state id="InitializeDebugger">
-                    <transition target="../Waiting">
-                        <script>
-                        <![CDATA[
-                            self.initializeDebugger()
-                        ]]>
-                        </script>
-                        <raise event="SmallStep.Initialized" scope="narrow" target="'parent'" />
-                    </transition>
-                </state>
-                <state id="SettleBeforeWaiting">
-                    <transition target="../Waiting" after="self.sccd_yield()" />
-                </state>
+            <state id="Initializer" initial="Waiting">
                 <state id="Waiting">
-                    <transition target="../CreatingChildSimulator" cond="INSTATE('../../ModeSelector/Running') and INSTATE('../../BlockState/Uninitialized') and not self.endCondition()">
+                    <transition target="../CreatingChildSimulator" cond="INSTATE('../../ModeSelector/Running') and INSTATE('../../ChildState/Uninitialized') and not self.endCondition()">
                         <raise event="create_instance" scope="cd">
                             <parameter expr="'child_simulator'" />
                             <parameter expr="'CBDSimulator_Block'" />
@@ -121,45 +96,43 @@
                     <transition target="../Running" event="Block.Initialized" />
                 </state>
                 <state id="Running">
-                    <transition target="../SettleBeforeWaiting" event="Block.Finished">
-                        <parameter name="new_state" />
+                    <transition target="../SettleBeforeWaiting" event="Block.Finished" />
+                </state>
+                <state id="SettleBeforeWaiting">
+                    <transition target="../Waiting" after="self.sccd_yield()" />
+                </state>
+            </state>
+            <state id="SimulationFlow" initial="Started">
+                <state id="Started">
+                    <transition target="../Initialized">
                         <script>
                         <![CDATA[
-                            self.small_step_executed = True
-                            self.state = new_state
+                            self.initialize()
                         ]]>
                         </script>
                     </transition>
                 </state>
-            </state>
-            <state id="SimulationFlow" initial="Initializing">
-                <state id="Initializing">
-                    <!-- We make sure we are initialized -->
-                    <transition target="../Waiting" cond="INSTATE('../../Initializer/Waiting')" />
+                <state id="Initialized">
+                    <transition target="../InitializeDebugger" />
                 </state>
-                <state id="Waiting">
-                    <transition target="../CheckTermination" cond="INSTATE('../../ModeSelector/Running')" />
-                    <!-- in case a small step triggers the end condition of the simulation -->
-                    <!-- TODO: Probably we don't need this anymore, since the simulation will always coordinate big steps... -->
-                    <transition target="../Stopped" cond="self.endCondition()">
+                <state id="InitializeDebugger">
+                    <transition target="../Waiting">
                         <script>
                         <![CDATA[
-                            # print '>>> small step executed <<<'
-                            self.finalize()
+                            self.initializeDebugger()
                         ]]>
                         </script>
-                        <raise event="SmallStep.Finished" />
-                        <raise event="SmallStep.Finished" scope="narrow" target="'parent'">
-                            <parameter expr="self.current_component_idx" />
-                            <parameter expr="self.state" />
-                        </raise>
+                        <raise event="SmallStep.Initialized" scope="narrow" target="'parent'" />
                     </transition>
                 </state>
+                <state id="Waiting">
+                    <transition target="../CheckTermination" cond="INSTATE('../../ModeSelector/Running')" />
+                </state>
                 <state id="SettleBeforeCheckTermination">
                     <transition target="../CheckTermination" after="self.sccd_yield()" />
                 </state>
                 <state id="CheckTermination">
-                    <transition target="../Executing" cond="INSTATE('../../ModeSelector/Running/Continuous') and INSTATE('../../BlockState/Initialized') and not self.endCondition()">
+                    <transition target="../Executing" cond="INSTATE('../../ModeSelector/Running/Continuous') and INSTATE('../../ChildState/Initialized') and not self.endCondition()">
                         <raise event="Block.Execute" scope="narrow" target="'child_simulator'" />
                     </transition>
                     <transition target="../Stopped" cond="self.endCondition()">
@@ -177,7 +150,15 @@
                     </transition>
                 </state>
                 <state id="Executing">
-                    <transition target="../SettleBeforeCheckTermination" event="Block.Finished" />
+                    <transition target="../SettleBeforeCheckTermination" event="Block.Finished">
+                        <parameter name="new_state" />
+                        <script>
+                        <![CDATA[
+                            self.small_step_executed = True
+                            self.state = new_state
+                        ]]>
+                        </script>
+                    </transition>
                 </state>
                 <state id="Stopped" />
             </state>

Dosya farkı çok büyük olduğundan ihmal edildi
+ 356 - 372
debugging_fsa_cbd_composition/cbdsimulator/HierarchicalSimulator/target.py


+ 1 - 1
debugging_fsa_cbd_composition/cbdsimulator/target.py

@@ -1,7 +1,7 @@
 """
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 
-Date:   Fri Oct 28 14:17:28 2016
+Date:   Wed Nov 09 17:04:31 2016
 
 Model author: Sadaf Mustafiz and Claudio Gomes and Simon Van Mierlo
 Model name:   CBDSimulator