Browse Source

hybrid hierarchical simulator working

Cláudio Gomes 9 years ago
parent
commit
aa118ed2bf

File diff suppressed because it is too large
+ 381 - 342
fsa_cbd_composition/figures/hybrid_fsa_sccd_hierarchical.graphml


fsa_cbd_composition/fsa_cbd_simulator/composed_hybrid_fsa_simulator.sccd → fsa_cbd_composition/fsa_cbd_simulator/DEPRECATED_composed_hybrid_fsa_simulator.sccd


fsa_cbd_composition/fsa_cbd_simulator/weaved_cbd_fsa_simulator.sccd → fsa_cbd_composition/fsa_cbd_simulator/DEPRECATED_weaved_cbd_fsa_simulator.sccd


fsa_cbd_composition/fsa_cbd_simulator/weaved_cbd_fsa_simulator_hierarchical.sccd → fsa_cbd_composition/fsa_cbd_simulator/DEPRECATED_weaved_cbd_fsa_simulator_hierarchical.sccd


fsa_cbd_composition/fsa_cbd_simulator/weaved_cbd_fsa_simulator_normal_form.sccd → fsa_cbd_composition/fsa_cbd_simulator/DEPRECATED_weaved_cbd_fsa_simulator_normal_form.sccd


+ 1 - 0
fsa_cbd_composition/fsa_cbd_simulator/fsa_cbd_simulator weaved_runner.py.launch

@@ -6,6 +6,7 @@
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
 <listEntry value="1"/>
 </listAttribute>
+<stringAttribute key="org.eclipse.debug.ui.ATTR_CAPTURE_IN_FILE" value="${workspace_loc:/fsa_cbd_simulator/log.txt}"/>
 <stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:fsa_cbd_simulator/weaved_runner.py}"/>
 <stringAttribute key="org.eclipse.ui.externaltools.ATTR_OTHER_WORKING_DIRECTORY" value="${workspace_loc:fsa_cbd_simulator}"/>
 <stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value=""/>

+ 2 - 2
fsa_cbd_composition/fsa_cbd_simulator/generateSCCD.bat

@@ -1,6 +1,6 @@
 @ECHO OFF
 setlocal
-set PYTHONPATH=C:\Users\clagms\Source Control\Git_SCCD\src\build\lib;C:\Users\clagms\Source Control\SVN_MvK
-python "C:\Users\clagms\Source Control\Git_SCCD\textualnotations\sccdtnc.py" "C:\Users\clagms\Source Control\Git_MLE\fsa_cbd_composition\fsa_cbd_simulator\weaved_cbd_fsa_simulator_hierarchical.sccd" -o "C:\Users\clagms\Source Control\Git_MLE\fsa_cbd_composition\fsa_cbd_simulator\weaved_cbd_fsa_simulator.py"
+set PYTHONPATH=C:\Users\clagms\Source Control\Git_SCCD\src\build\lib
+python -m sccd.compiler.sccdc -p threads -l python -o weaved_cbd_fsa_simulator.py woven_fsa_cbd_simulator_hierarchical.xml
 endlocal
 pause

+ 5 - 0
fsa_cbd_composition/fsa_cbd_simulator/plotSignals.r

@@ -12,6 +12,7 @@ pe <- ggplot(data=total , aes(x=fsatime, y=Event, group=1)) +
   xlab("Time (s)") + 
   scale_y_discrete("Event", labels = waiver(), limits=c("when(x +-)", "kick")) +
   theme(axis.title.y=element_text(vjust=-4))
+pe
 
 ps <- ggplot(data=total , aes(x=fsatime, y=fsastate, group=1)) +
   geom_line() +
@@ -19,18 +20,21 @@ ps <- ggplot(data=total , aes(x=fsatime, y=fsastate, group=1)) +
   xlab("Time (s)") + 
   scale_y_discrete("State", labels = waiver(), limits=c("Initial", "FreeFall", "Collision", "Kicked")) +
   theme(axis.title.y=element_text(vjust=-2))
+ps
 
 px <- ggplot(data=total , aes(x=fsatime, y=x, group=1)) +
         geom_line() +
         ylab("Height (m)") + 
         xlab("Time (s)") +
         theme(axis.title.y=element_text(vjust=-6))
+px
 
 pv <- ggplot(data=total , aes(x=fsatime, y=v, group=1)) +
         geom_line() +
         ylab("Velocity (m/s)") + 
         xlab("Time (s)") +
         theme(axis.title.y=element_text(vjust=-6))
+pv
 
 pt <- ggplot(data=total , aes(x=fsatime, y=current_cbdtime, group=1)) +
         geom_point() +
@@ -39,6 +43,7 @@ pt <- ggplot(data=total , aes(x=fsatime, y=current_cbdtime, group=1)) +
         scale_y_continuous(limits=c(0, 10)) +
         scale_x_continuous(limits=c(0, 10)) +
         theme(axis.title.y=element_text(vjust=-6))
+pt
 
 multiplot <- plot_grid(pe, ps, px , pv, pt, nrow = 3, ncol = 2, align = "v")
 px_pv_plot <- plot_grid(px, pv, nrow=1, ncol=2, align="h")

File diff suppressed because it is too large
+ 254 - 254
fsa_cbd_composition/fsa_cbd_simulator/signals.csv


+ 468 - 381
fsa_cbd_composition/fsa_cbd_simulator/weaved_cbd_fsa_simulator.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:   Tue Oct 11 10:37:04 2016
+Date:   Tue Oct 11 21:25:15 2016
 
 Model author: Sadaf Mustafiz and Bruno Barroca and Claudio Gomes
 Model name:   Weaved_CBD_FSA_Simulator_Manual
@@ -129,202 +129,170 @@ class Weaved_CBD_FSA_Simulator(RuntimeClassBase):
         # state <root>
         self.states[""] = State(0, self)
         
-        # state /ChildPaused
-        self.states["/ChildPaused"] = State(1, self)
+        # state /FSA
+        self.states["/FSA"] = State(1, self)
         
-        # state /ParentMicroStepProcessed
-        self.states["/ParentMicroStepProcessed"] = State(2, self)
+        # state /FSA/Started
+        self.states["/FSA/Started"] = State(2, self)
         
-        # state /ChildNotInitialized
-        self.states["/ChildNotInitialized"] = State(3, self)
+        # state /FSA/Initialized
+        self.states["/FSA/Initialized"] = State(3, self)
         
-        # state /ChildDetected
-        self.states["/ChildDetected"] = State(4, self)
+        # state /FSA/CheckTermination
+        self.states["/FSA/CheckTermination"] = State(4, self)
         
-        # state /ChildProcessed
-        self.states["/ChildProcessed"] = State(5, self)
+        # state /FSA/CheckTermination/MacroStepProcessed
+        self.states["/FSA/CheckTermination/MacroStepProcessed"] = State(5, self)
         
-        # state /ChildInitialized
-        self.states["/ChildInitialized"] = State(6, self)
+        # state /FSA/DoSimulation
+        self.states["/FSA/DoSimulation"] = State(6, self)
         
-        # state /HybridTerminated
-        self.states["/HybridTerminated"] = State(7, self)
+        # state /FSA/DoSimulation/MacroStepPrepared
+        self.states["/FSA/DoSimulation/MacroStepPrepared"] = State(7, self)
         
-        # state /FSA
-        self.states["/FSA"] = State(8, self)
+        # state /FSA/DoSimulation/MacroStepPrepared/ParentPaused
+        self.states["/FSA/DoSimulation/MacroStepPrepared/ParentPaused"] = State(8, self)
         
-        # state /FSA/MacroStepPrepared
-        self.states["/FSA/MacroStepPrepared"] = State(9, self)
+        # state /FSA/DoSimulation/MacroStepPrepared/ChildNotDetected
+        self.states["/FSA/DoSimulation/MacroStepPrepared/ChildNotDetected"] = State(9, self)
         
-        # state /FSA/MicroStepPrepared
-        self.states["/FSA/MicroStepPrepared"] = State(10, self)
+        # state /FSA/DoSimulation/MacroStepPrepared/ChildDetected
+        self.states["/FSA/DoSimulation/MacroStepPrepared/ChildDetected"] = State(10, self)
         
-        # state /FSA/Initialized
-        self.states["/FSA/Initialized"] = State(11, self)
+        # state /FSA/DoSimulation/MacroStepPrepared/ChildInitialized
+        self.states["/FSA/DoSimulation/MacroStepPrepared/ChildInitialized"] = State(11, self)
         
-        # state /FSA/MicroStepProcessed
-        self.states["/FSA/MicroStepProcessed"] = State(12, self)
+        # state /FSA/DoSimulation/MacroStepPrepared/ChildNotInitialized
+        self.states["/FSA/DoSimulation/MacroStepPrepared/ChildNotInitialized"] = State(12, self)
         
-        # state /FSA/Started
-        self.states["/FSA/Started"] = State(13, self)
+        # state /FSA/DoSimulation/MacroStepPrepared/CBD
+        self.states["/FSA/DoSimulation/MacroStepPrepared/CBD"] = State(13, self)
         
-        # state /FSA/CheckTermination
-        self.states["/FSA/CheckTermination"] = State(14, self)
+        # state /FSA/DoSimulation/MacroStepPrepared/CBD/Started
+        self.states["/FSA/DoSimulation/MacroStepPrepared/CBD/Started"] = State(14, self)
         
-        # state /FSA/CheckTermination/MacroStepProcessed
-        self.states["/FSA/CheckTermination/MacroStepProcessed"] = State(15, self)
+        # state /FSA/DoSimulation/MacroStepPrepared/CBD/Initialized
+        self.states["/FSA/DoSimulation/MacroStepPrepared/CBD/Initialized"] = State(15, self)
         
-        # state /FSA/Terminated
-        self.states["/FSA/Terminated"] = State(16, self)
+        # state /FSA/DoSimulation/MacroStepPrepared/ChildProcessed
+        self.states["/FSA/DoSimulation/MacroStepPrepared/ChildProcessed"] = State(16, self)
         
-        # state /NoStateEventDetected
-        self.states["/NoStateEventDetected"] = State(17, self)
+        # state /FSA/DoSimulation/MicroStepProcessed
+        self.states["/FSA/DoSimulation/MicroStepProcessed"] = State(17, self)
         
-        # state /StateEventDetected
-        self.states["/StateEventDetected"] = State(18, self)
+        # state /FSA/DoSimulation/MicroStepProcessed/ParentPaused
+        self.states["/FSA/DoSimulation/MicroStepProcessed/ParentPaused"] = State(18, self)
         
-        # state /ParentPaused
-        self.states["/ParentPaused"] = State(19, self)
+        # state /FSA/DoSimulation/MicroStepProcessed/ChildNotDetected
+        self.states["/FSA/DoSimulation/MicroStepProcessed/ChildNotDetected"] = State(19, self)
         
-        # state /ParentStarted
-        self.states["/ParentStarted"] = State(20, self)
+        # state /FSA/DoSimulation/MicroStepProcessed/ChildDetected
+        self.states["/FSA/DoSimulation/MicroStepProcessed/ChildDetected"] = State(20, self)
+        
+        # state /FSA/DoSimulation/MicroStepProcessed/ChildInitialized
+        self.states["/FSA/DoSimulation/MicroStepProcessed/ChildInitialized"] = State(21, self)
+        
+        # state /FSA/DoSimulation/MicroStepProcessed/CBD
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD"] = State(22, self)
         
-        # state /CBD
-        self.states["/CBD"] = State(21, self)
+        # state /FSA/DoSimulation/MicroStepProcessed/CBD/CheckTermination
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/CheckTermination"] = State(23, self)
         
-        # state /CBD/Initialized
-        self.states["/CBD/Initialized"] = State(22, self)
+        # state /FSA/DoSimulation/MicroStepProcessed/CBD/CheckTermination/MacroStepProcessed
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/CheckTermination/MacroStepProcessed"] = State(24, self)
         
-        # state /CBD/Started
-        self.states["/CBD/Started"] = State(23, self)
+        # state /FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation"] = State(25, self)
         
-        # state /CBD/MicroStepProcessed
-        self.states["/CBD/MicroStepProcessed"] = State(24, self)
+        # state /FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MacroStepPrepared
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MacroStepPrepared"] = State(26, self)
         
-        # state /CBD/MacroStepPrepared
-        self.states["/CBD/MacroStepPrepared"] = State(25, self)
+        # state /FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MicroStepProcessed
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MicroStepProcessed"] = State(27, self)
         
-        # state /CBD/MacroStepProcessed
-        self.states["/CBD/MacroStepProcessed"] = State(26, self)
+        # state /FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MicroStepPrepared
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MicroStepPrepared"] = State(28, self)
         
-        # state /CBD/Terminated
-        self.states["/CBD/Terminated"] = State(27, self)
+        # state /FSA/DoSimulation/MicroStepProcessed/CBD/Terminated
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/Terminated"] = State(29, self)
         
-        # state /CBD/MicroStepPrepared
-        self.states["/CBD/MicroStepPrepared"] = State(28, self)
+        # state /FSA/DoSimulation/MicroStepProcessed/ChildPaused
+        self.states["/FSA/DoSimulation/MicroStepProcessed/ChildPaused"] = State(30, self)
+        
+        # state /FSA/DoSimulation/MicroStepProcessed/NoStateEventDetected
+        self.states["/FSA/DoSimulation/MicroStepProcessed/NoStateEventDetected"] = State(31, self)
+        
+        # state /FSA/DoSimulation/MicroStepProcessed/StateEventDetected
+        self.states["/FSA/DoSimulation/MicroStepProcessed/StateEventDetected"] = State(32, self)
+        
+        # state /FSA/DoSimulation/MicroStepProcessed/ChildProcessed
+        self.states["/FSA/DoSimulation/MicroStepProcessed/ChildProcessed"] = State(33, self)
+        
+        # state /FSA/DoSimulation/MicroStepPrepared
+        self.states["/FSA/DoSimulation/MicroStepPrepared"] = State(34, self)
+        
+        # state /FSA/DoSimulation/ParentMicroStepProcessed
+        self.states["/FSA/DoSimulation/ParentMicroStepProcessed"] = State(35, self)
+        
+        # state /FSA/Terminated
+        self.states["/FSA/Terminated"] = State(36, self)
+        
+        # state /ParentStarted
+        self.states["/ParentStarted"] = State(37, self)
+        
+        # state /HybridTerminated
+        self.states["/HybridTerminated"] = State(38, self)
         
         # add children
-        self.states[""].addChild(self.states["/ChildPaused"])
-        self.states[""].addChild(self.states["/ParentMicroStepProcessed"])
-        self.states[""].addChild(self.states["/ChildNotInitialized"])
-        self.states[""].addChild(self.states["/ChildDetected"])
-        self.states[""].addChild(self.states["/ChildProcessed"])
-        self.states[""].addChild(self.states["/ChildInitialized"])
-        self.states[""].addChild(self.states["/HybridTerminated"])
         self.states[""].addChild(self.states["/FSA"])
-        self.states[""].addChild(self.states["/NoStateEventDetected"])
-        self.states[""].addChild(self.states["/StateEventDetected"])
-        self.states[""].addChild(self.states["/ParentPaused"])
         self.states[""].addChild(self.states["/ParentStarted"])
-        self.states[""].addChild(self.states["/CBD"])
-        self.states["/FSA"].addChild(self.states["/FSA/MacroStepPrepared"])
-        self.states["/FSA"].addChild(self.states["/FSA/MicroStepPrepared"])
-        self.states["/FSA"].addChild(self.states["/FSA/Initialized"])
-        self.states["/FSA"].addChild(self.states["/FSA/MicroStepProcessed"])
+        self.states[""].addChild(self.states["/HybridTerminated"])
         self.states["/FSA"].addChild(self.states["/FSA/Started"])
+        self.states["/FSA"].addChild(self.states["/FSA/Initialized"])
         self.states["/FSA"].addChild(self.states["/FSA/CheckTermination"])
+        self.states["/FSA"].addChild(self.states["/FSA/DoSimulation"])
         self.states["/FSA"].addChild(self.states["/FSA/Terminated"])
         self.states["/FSA/CheckTermination"].addChild(self.states["/FSA/CheckTermination/MacroStepProcessed"])
-        self.states["/CBD"].addChild(self.states["/CBD/Initialized"])
-        self.states["/CBD"].addChild(self.states["/CBD/Started"])
-        self.states["/CBD"].addChild(self.states["/CBD/MicroStepProcessed"])
-        self.states["/CBD"].addChild(self.states["/CBD/MacroStepPrepared"])
-        self.states["/CBD"].addChild(self.states["/CBD/MacroStepProcessed"])
-        self.states["/CBD"].addChild(self.states["/CBD/Terminated"])
-        self.states["/CBD"].addChild(self.states["/CBD/MicroStepPrepared"])
+        self.states["/FSA/DoSimulation"].addChild(self.states["/FSA/DoSimulation/MacroStepPrepared"])
+        self.states["/FSA/DoSimulation"].addChild(self.states["/FSA/DoSimulation/MicroStepProcessed"])
+        self.states["/FSA/DoSimulation"].addChild(self.states["/FSA/DoSimulation/MicroStepPrepared"])
+        self.states["/FSA/DoSimulation"].addChild(self.states["/FSA/DoSimulation/ParentMicroStepProcessed"])
+        self.states["/FSA/DoSimulation/MacroStepPrepared"].addChild(self.states["/FSA/DoSimulation/MacroStepPrepared/ParentPaused"])
+        self.states["/FSA/DoSimulation/MacroStepPrepared"].addChild(self.states["/FSA/DoSimulation/MacroStepPrepared/ChildNotDetected"])
+        self.states["/FSA/DoSimulation/MacroStepPrepared"].addChild(self.states["/FSA/DoSimulation/MacroStepPrepared/ChildDetected"])
+        self.states["/FSA/DoSimulation/MacroStepPrepared"].addChild(self.states["/FSA/DoSimulation/MacroStepPrepared/ChildInitialized"])
+        self.states["/FSA/DoSimulation/MacroStepPrepared"].addChild(self.states["/FSA/DoSimulation/MacroStepPrepared/ChildNotInitialized"])
+        self.states["/FSA/DoSimulation/MacroStepPrepared"].addChild(self.states["/FSA/DoSimulation/MacroStepPrepared/CBD"])
+        self.states["/FSA/DoSimulation/MacroStepPrepared"].addChild(self.states["/FSA/DoSimulation/MacroStepPrepared/ChildProcessed"])
+        self.states["/FSA/DoSimulation/MacroStepPrepared/CBD"].addChild(self.states["/FSA/DoSimulation/MacroStepPrepared/CBD/Started"])
+        self.states["/FSA/DoSimulation/MacroStepPrepared/CBD"].addChild(self.states["/FSA/DoSimulation/MacroStepPrepared/CBD/Initialized"])
+        self.states["/FSA/DoSimulation/MicroStepProcessed"].addChild(self.states["/FSA/DoSimulation/MicroStepProcessed/ParentPaused"])
+        self.states["/FSA/DoSimulation/MicroStepProcessed"].addChild(self.states["/FSA/DoSimulation/MicroStepProcessed/ChildNotDetected"])
+        self.states["/FSA/DoSimulation/MicroStepProcessed"].addChild(self.states["/FSA/DoSimulation/MicroStepProcessed/ChildDetected"])
+        self.states["/FSA/DoSimulation/MicroStepProcessed"].addChild(self.states["/FSA/DoSimulation/MicroStepProcessed/ChildInitialized"])
+        self.states["/FSA/DoSimulation/MicroStepProcessed"].addChild(self.states["/FSA/DoSimulation/MicroStepProcessed/CBD"])
+        self.states["/FSA/DoSimulation/MicroStepProcessed"].addChild(self.states["/FSA/DoSimulation/MicroStepProcessed/ChildPaused"])
+        self.states["/FSA/DoSimulation/MicroStepProcessed"].addChild(self.states["/FSA/DoSimulation/MicroStepProcessed/NoStateEventDetected"])
+        self.states["/FSA/DoSimulation/MicroStepProcessed"].addChild(self.states["/FSA/DoSimulation/MicroStepProcessed/StateEventDetected"])
+        self.states["/FSA/DoSimulation/MicroStepProcessed"].addChild(self.states["/FSA/DoSimulation/MicroStepProcessed/ChildProcessed"])
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD"].addChild(self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/CheckTermination"])
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD"].addChild(self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation"])
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD"].addChild(self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/Terminated"])
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/CheckTermination"].addChild(self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/CheckTermination/MacroStepProcessed"])
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation"].addChild(self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MacroStepPrepared"])
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation"].addChild(self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MicroStepProcessed"])
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation"].addChild(self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MicroStepPrepared"])
         self.states[""].fixTree()
         self.states[""].default_state = self.states["/FSA"]
         self.states["/FSA"].default_state = self.states["/FSA/Started"]
         self.states["/FSA/CheckTermination"].default_state = self.states["/FSA/CheckTermination/MacroStepProcessed"]
-        self.states["/CBD"].default_state = self.states["/CBD/Started"]
-        
-        # transition /ChildPaused
-        _ChildPaused_0 = Transition(self, self.states["/ChildPaused"], [self.states["/NoStateEventDetected"]])
-        _ChildPaused_0.setAction(self._ChildPaused_0_exec)
-        _ChildPaused_0.setTrigger(None)
-        _ChildPaused_0.setGuard(self._ChildPaused_0_guard)
-        self.states["/ChildPaused"].addTransition(_ChildPaused_0)
-        _ChildPaused_1 = Transition(self, self.states["/ChildPaused"], [self.states["/StateEventDetected"]])
-        _ChildPaused_1.setAction(self._ChildPaused_1_exec)
-        _ChildPaused_1.setTrigger(None)
-        _ChildPaused_1.setGuard(self._ChildPaused_1_guard)
-        self.states["/ChildPaused"].addTransition(_ChildPaused_1)
-        
-        # transition /ParentMicroStepProcessed
-        _ParentMicroStepProcessed_0 = Transition(self, self.states["/ParentMicroStepProcessed"], [self.states["/ParentPaused"]])
-        _ParentMicroStepProcessed_0.setAction(self._ParentMicroStepProcessed_0_exec)
-        _ParentMicroStepProcessed_0.setTrigger(None)
-        self.states["/ParentMicroStepProcessed"].addTransition(_ParentMicroStepProcessed_0)
-        
-        # transition /ChildNotInitialized
-        _ChildNotInitialized_0 = Transition(self, self.states["/ChildNotInitialized"], [self.states["/CBD/Started"]])
-        _ChildNotInitialized_0.setAction(self._ChildNotInitialized_0_exec)
-        _ChildNotInitialized_0.setTrigger(None)
-        self.states["/ChildNotInitialized"].addTransition(_ChildNotInitialized_0)
-        
-        # transition /ChildDetected
-        _ChildDetected_0 = Transition(self, self.states["/ChildDetected"], [self.states["/ChildInitialized"]])
-        _ChildDetected_0.setAction(self._ChildDetected_0_exec)
-        _ChildDetected_0.setTrigger(None)
-        _ChildDetected_0.setGuard(self._ChildDetected_0_guard)
-        self.states["/ChildDetected"].addTransition(_ChildDetected_0)
-        _ChildDetected_1 = Transition(self, self.states["/ChildDetected"], [self.states["/ChildNotInitialized"]])
-        _ChildDetected_1.setAction(self._ChildDetected_1_exec)
-        _ChildDetected_1.setTrigger(None)
-        _ChildDetected_1.setGuard(self._ChildDetected_1_guard)
-        self.states["/ChildDetected"].addTransition(_ChildDetected_1)
-        
-        # transition /ChildProcessed
-        _ChildProcessed_0 = Transition(self, self.states["/ChildProcessed"], [self.states["/FSA/MicroStepProcessed"]])
-        _ChildProcessed_0.setAction(self._ChildProcessed_0_exec)
-        _ChildProcessed_0.setTrigger(None)
-        self.states["/ChildProcessed"].addTransition(_ChildProcessed_0)
-        
-        # transition /ChildInitialized
-        _ChildInitialized_0 = Transition(self, self.states["/ChildInitialized"], [self.states["/CBD/MacroStepProcessed"]])
-        _ChildInitialized_0.setAction(self._ChildInitialized_0_exec)
-        _ChildInitialized_0.setTrigger(None)
-        self.states["/ChildInitialized"].addTransition(_ChildInitialized_0)
-        
-        # transition /FSA/MacroStepPrepared
-        _FSA_MacroStepPrepared_0 = Transition(self, self.states["/FSA/MacroStepPrepared"], [self.states["/ParentPaused"]])
-        _FSA_MacroStepPrepared_0.setAction(self._FSA_MacroStepPrepared_0_exec)
-        _FSA_MacroStepPrepared_0.setTrigger(None)
-        self.states["/FSA/MacroStepPrepared"].addTransition(_FSA_MacroStepPrepared_0)
-        
-        # transition /FSA/MicroStepPrepared
-        _FSA_MicroStepPrepared_0 = Transition(self, self.states["/FSA/MicroStepPrepared"], [self.states["/ParentMicroStepProcessed"]])
-        _FSA_MicroStepPrepared_0.setAction(self._FSA_MicroStepPrepared_0_exec)
-        _FSA_MicroStepPrepared_0.setTrigger(None)
-        self.states["/FSA/MicroStepPrepared"].addTransition(_FSA_MicroStepPrepared_0)
-        
-        # transition /FSA/Initialized
-        _FSA_Initialized_0 = Transition(self, self.states["/FSA/Initialized"], [self.states["/FSA/CheckTermination"]])
-        _FSA_Initialized_0.setAction(self._FSA_Initialized_0_exec)
-        _FSA_Initialized_0.setTrigger(None)
-        self.states["/FSA/Initialized"].addTransition(_FSA_Initialized_0)
-        
-        # transition /FSA/MicroStepProcessed
-        _FSA_MicroStepProcessed_0 = Transition(self, self.states["/FSA/MicroStepProcessed"], [self.states["/FSA/MicroStepPrepared"]])
-        _FSA_MicroStepProcessed_0.setAction(self._FSA_MicroStepProcessed_0_exec)
-        _FSA_MicroStepProcessed_0.setTrigger(None)
-        _FSA_MicroStepProcessed_0.setGuard(self._FSA_MicroStepProcessed_0_guard)
-        self.states["/FSA/MicroStepProcessed"].addTransition(_FSA_MicroStepProcessed_0)
-        _FSA_MicroStepProcessed_1 = Transition(self, self.states["/FSA/MicroStepProcessed"], [self.states["/FSA/CheckTermination"]])
-        _FSA_MicroStepProcessed_1.setAction(self._FSA_MicroStepProcessed_1_exec)
-        _FSA_MicroStepProcessed_1.setTrigger(None)
-        _FSA_MicroStepProcessed_1.setGuard(self._FSA_MicroStepProcessed_1_guard)
-        self.states["/FSA/MicroStepProcessed"].addTransition(_FSA_MicroStepProcessed_1)
+        self.states["/FSA/DoSimulation"].default_state = self.states["/FSA/DoSimulation/MacroStepPrepared"]
+        self.states["/FSA/DoSimulation/MacroStepPrepared"].default_state = self.states["/FSA/DoSimulation/MacroStepPrepared/ParentPaused"]
+        self.states["/FSA/DoSimulation/MacroStepPrepared/CBD"].default_state = self.states["/FSA/DoSimulation/MacroStepPrepared/CBD/Started"]
+        self.states["/FSA/DoSimulation/MicroStepProcessed"].default_state = self.states["/FSA/DoSimulation/MicroStepProcessed/ParentPaused"]
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD"].default_state = self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/CheckTermination"]
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/CheckTermination"].default_state = self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/CheckTermination/MacroStepProcessed"]
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation"].default_state = self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MacroStepPrepared"]
         
         # transition /FSA/Started
         _FSA_Started_0 = Transition(self, self.states["/FSA/Started"], [self.states["/ParentStarted"]])
@@ -332,8 +300,14 @@ class Weaved_CBD_FSA_Simulator(RuntimeClassBase):
         _FSA_Started_0.setTrigger(None)
         self.states["/FSA/Started"].addTransition(_FSA_Started_0)
         
+        # transition /FSA/Initialized
+        _FSA_Initialized_0 = Transition(self, self.states["/FSA/Initialized"], [self.states["/FSA/CheckTermination"]])
+        _FSA_Initialized_0.setAction(self._FSA_Initialized_0_exec)
+        _FSA_Initialized_0.setTrigger(None)
+        self.states["/FSA/Initialized"].addTransition(_FSA_Initialized_0)
+        
         # transition /FSA/CheckTermination/MacroStepProcessed
-        _FSA_CheckTermination_MacroStepProcessed_0 = Transition(self, self.states["/FSA/CheckTermination/MacroStepProcessed"], [self.states["/FSA/MacroStepPrepared"]])
+        _FSA_CheckTermination_MacroStepProcessed_0 = Transition(self, self.states["/FSA/CheckTermination/MacroStepProcessed"], [self.states["/FSA/DoSimulation"]])
         _FSA_CheckTermination_MacroStepProcessed_0.setAction(self._FSA_CheckTermination_MacroStepProcessed_0_exec)
         _FSA_CheckTermination_MacroStepProcessed_0.setTrigger(None)
         _FSA_CheckTermination_MacroStepProcessed_0.setGuard(self._FSA_CheckTermination_MacroStepProcessed_0_guard)
@@ -344,182 +318,198 @@ class Weaved_CBD_FSA_Simulator(RuntimeClassBase):
         _FSA_CheckTermination_MacroStepProcessed_1.setGuard(self._FSA_CheckTermination_MacroStepProcessed_1_guard)
         self.states["/FSA/CheckTermination/MacroStepProcessed"].addTransition(_FSA_CheckTermination_MacroStepProcessed_1)
         
+        # transition /FSA/DoSimulation/MacroStepPrepared/ParentPaused
+        _FSA_DoSimulation_MacroStepPrepared_ParentPaused_0 = Transition(self, self.states["/FSA/DoSimulation/MacroStepPrepared/ParentPaused"], [self.states["/FSA/DoSimulation/MacroStepPrepared/ChildDetected"]])
+        _FSA_DoSimulation_MacroStepPrepared_ParentPaused_0.setAction(self._FSA_DoSimulation_MacroStepPrepared_ParentPaused_0_exec)
+        _FSA_DoSimulation_MacroStepPrepared_ParentPaused_0.setTrigger(None)
+        _FSA_DoSimulation_MacroStepPrepared_ParentPaused_0.setGuard(self._FSA_DoSimulation_MacroStepPrepared_ParentPaused_0_guard)
+        self.states["/FSA/DoSimulation/MacroStepPrepared/ParentPaused"].addTransition(_FSA_DoSimulation_MacroStepPrepared_ParentPaused_0)
+        _FSA_DoSimulation_MacroStepPrepared_ParentPaused_1 = Transition(self, self.states["/FSA/DoSimulation/MacroStepPrepared/ParentPaused"], [self.states["/FSA/DoSimulation/MacroStepPrepared/ChildNotDetected"]])
+        _FSA_DoSimulation_MacroStepPrepared_ParentPaused_1.setAction(self._FSA_DoSimulation_MacroStepPrepared_ParentPaused_1_exec)
+        _FSA_DoSimulation_MacroStepPrepared_ParentPaused_1.setTrigger(None)
+        _FSA_DoSimulation_MacroStepPrepared_ParentPaused_1.setGuard(self._FSA_DoSimulation_MacroStepPrepared_ParentPaused_1_guard)
+        self.states["/FSA/DoSimulation/MacroStepPrepared/ParentPaused"].addTransition(_FSA_DoSimulation_MacroStepPrepared_ParentPaused_1)
+        
+        # transition /FSA/DoSimulation/MacroStepPrepared/ChildNotDetected
+        _FSA_DoSimulation_MacroStepPrepared_ChildNotDetected_0 = Transition(self, self.states["/FSA/DoSimulation/MacroStepPrepared/ChildNotDetected"], [self.states["/FSA/DoSimulation/MacroStepPrepared/ChildProcessed"]])
+        _FSA_DoSimulation_MacroStepPrepared_ChildNotDetected_0.setAction(self._FSA_DoSimulation_MacroStepPrepared_ChildNotDetected_0_exec)
+        _FSA_DoSimulation_MacroStepPrepared_ChildNotDetected_0.setTrigger(None)
+        self.states["/FSA/DoSimulation/MacroStepPrepared/ChildNotDetected"].addTransition(_FSA_DoSimulation_MacroStepPrepared_ChildNotDetected_0)
+        
+        # transition /FSA/DoSimulation/MacroStepPrepared/ChildDetected
+        _FSA_DoSimulation_MacroStepPrepared_ChildDetected_0 = Transition(self, self.states["/FSA/DoSimulation/MacroStepPrepared/ChildDetected"], [self.states["/FSA/DoSimulation/MacroStepPrepared/ChildInitialized"]])
+        _FSA_DoSimulation_MacroStepPrepared_ChildDetected_0.setAction(self._FSA_DoSimulation_MacroStepPrepared_ChildDetected_0_exec)
+        _FSA_DoSimulation_MacroStepPrepared_ChildDetected_0.setTrigger(None)
+        _FSA_DoSimulation_MacroStepPrepared_ChildDetected_0.setGuard(self._FSA_DoSimulation_MacroStepPrepared_ChildDetected_0_guard)
+        self.states["/FSA/DoSimulation/MacroStepPrepared/ChildDetected"].addTransition(_FSA_DoSimulation_MacroStepPrepared_ChildDetected_0)
+        _FSA_DoSimulation_MacroStepPrepared_ChildDetected_1 = Transition(self, self.states["/FSA/DoSimulation/MacroStepPrepared/ChildDetected"], [self.states["/FSA/DoSimulation/MacroStepPrepared/ChildNotInitialized"]])
+        _FSA_DoSimulation_MacroStepPrepared_ChildDetected_1.setAction(self._FSA_DoSimulation_MacroStepPrepared_ChildDetected_1_exec)
+        _FSA_DoSimulation_MacroStepPrepared_ChildDetected_1.setTrigger(None)
+        _FSA_DoSimulation_MacroStepPrepared_ChildDetected_1.setGuard(self._FSA_DoSimulation_MacroStepPrepared_ChildDetected_1_guard)
+        self.states["/FSA/DoSimulation/MacroStepPrepared/ChildDetected"].addTransition(_FSA_DoSimulation_MacroStepPrepared_ChildDetected_1)
+        
+        # transition /FSA/DoSimulation/MacroStepPrepared/ChildInitialized
+        _FSA_DoSimulation_MacroStepPrepared_ChildInitialized_0 = Transition(self, self.states["/FSA/DoSimulation/MacroStepPrepared/ChildInitialized"], [self.states["/FSA/DoSimulation/MacroStepPrepared/ChildProcessed"]])
+        _FSA_DoSimulation_MacroStepPrepared_ChildInitialized_0.setAction(self._FSA_DoSimulation_MacroStepPrepared_ChildInitialized_0_exec)
+        _FSA_DoSimulation_MacroStepPrepared_ChildInitialized_0.setTrigger(None)
+        self.states["/FSA/DoSimulation/MacroStepPrepared/ChildInitialized"].addTransition(_FSA_DoSimulation_MacroStepPrepared_ChildInitialized_0)
+        
+        # transition /FSA/DoSimulation/MacroStepPrepared/ChildNotInitialized
+        _FSA_DoSimulation_MacroStepPrepared_ChildNotInitialized_0 = Transition(self, self.states["/FSA/DoSimulation/MacroStepPrepared/ChildNotInitialized"], [self.states["/FSA/DoSimulation/MacroStepPrepared/CBD/Started"]])
+        _FSA_DoSimulation_MacroStepPrepared_ChildNotInitialized_0.setAction(self._FSA_DoSimulation_MacroStepPrepared_ChildNotInitialized_0_exec)
+        _FSA_DoSimulation_MacroStepPrepared_ChildNotInitialized_0.setTrigger(None)
+        self.states["/FSA/DoSimulation/MacroStepPrepared/ChildNotInitialized"].addTransition(_FSA_DoSimulation_MacroStepPrepared_ChildNotInitialized_0)
+        
+        # transition /FSA/DoSimulation/MacroStepPrepared/CBD/Started
+        _FSA_DoSimulation_MacroStepPrepared_CBD_Started_0 = Transition(self, self.states["/FSA/DoSimulation/MacroStepPrepared/CBD/Started"], [self.states["/FSA/DoSimulation/MacroStepPrepared/CBD/Initialized"]])
+        _FSA_DoSimulation_MacroStepPrepared_CBD_Started_0.setAction(self._FSA_DoSimulation_MacroStepPrepared_CBD_Started_0_exec)
+        _FSA_DoSimulation_MacroStepPrepared_CBD_Started_0.setTrigger(None)
+        self.states["/FSA/DoSimulation/MacroStepPrepared/CBD/Started"].addTransition(_FSA_DoSimulation_MacroStepPrepared_CBD_Started_0)
+        
+        # transition /FSA/DoSimulation/MacroStepPrepared/CBD/Initialized
+        _FSA_DoSimulation_MacroStepPrepared_CBD_Initialized_0 = Transition(self, self.states["/FSA/DoSimulation/MacroStepPrepared/CBD/Initialized"], [self.states["/FSA/DoSimulation/MacroStepPrepared/ChildInitialized"]])
+        _FSA_DoSimulation_MacroStepPrepared_CBD_Initialized_0.setAction(self._FSA_DoSimulation_MacroStepPrepared_CBD_Initialized_0_exec)
+        _FSA_DoSimulation_MacroStepPrepared_CBD_Initialized_0.setTrigger(None)
+        self.states["/FSA/DoSimulation/MacroStepPrepared/CBD/Initialized"].addTransition(_FSA_DoSimulation_MacroStepPrepared_CBD_Initialized_0)
+        
+        # transition /FSA/DoSimulation/MacroStepPrepared/ChildProcessed
+        _FSA_DoSimulation_MacroStepPrepared_ChildProcessed_0 = Transition(self, self.states["/FSA/DoSimulation/MacroStepPrepared/ChildProcessed"], [self.states["/FSA/DoSimulation/MicroStepProcessed"]])
+        _FSA_DoSimulation_MacroStepPrepared_ChildProcessed_0.setAction(self._FSA_DoSimulation_MacroStepPrepared_ChildProcessed_0_exec)
+        _FSA_DoSimulation_MacroStepPrepared_ChildProcessed_0.setTrigger(None)
+        self.states["/FSA/DoSimulation/MacroStepPrepared/ChildProcessed"].addTransition(_FSA_DoSimulation_MacroStepPrepared_ChildProcessed_0)
+        
+        # transition /FSA/DoSimulation/MicroStepProcessed/ParentPaused
+        _FSA_DoSimulation_MicroStepProcessed_ParentPaused_0 = Transition(self, self.states["/FSA/DoSimulation/MicroStepProcessed/ParentPaused"], [self.states["/FSA/DoSimulation/MicroStepProcessed/ChildDetected"]])
+        _FSA_DoSimulation_MicroStepProcessed_ParentPaused_0.setAction(self._FSA_DoSimulation_MicroStepProcessed_ParentPaused_0_exec)
+        _FSA_DoSimulation_MicroStepProcessed_ParentPaused_0.setTrigger(None)
+        _FSA_DoSimulation_MicroStepProcessed_ParentPaused_0.setGuard(self._FSA_DoSimulation_MicroStepProcessed_ParentPaused_0_guard)
+        self.states["/FSA/DoSimulation/MicroStepProcessed/ParentPaused"].addTransition(_FSA_DoSimulation_MicroStepProcessed_ParentPaused_0)
+        _FSA_DoSimulation_MicroStepProcessed_ParentPaused_1 = Transition(self, self.states["/FSA/DoSimulation/MicroStepProcessed/ParentPaused"], [self.states["/FSA/DoSimulation/MicroStepProcessed/ChildNotDetected"]])
+        _FSA_DoSimulation_MicroStepProcessed_ParentPaused_1.setAction(self._FSA_DoSimulation_MicroStepProcessed_ParentPaused_1_exec)
+        _FSA_DoSimulation_MicroStepProcessed_ParentPaused_1.setTrigger(None)
+        _FSA_DoSimulation_MicroStepProcessed_ParentPaused_1.setGuard(self._FSA_DoSimulation_MicroStepProcessed_ParentPaused_1_guard)
+        self.states["/FSA/DoSimulation/MicroStepProcessed/ParentPaused"].addTransition(_FSA_DoSimulation_MicroStepProcessed_ParentPaused_1)
+        
+        # transition /FSA/DoSimulation/MicroStepProcessed/ChildNotDetected
+        _FSA_DoSimulation_MicroStepProcessed_ChildNotDetected_0 = Transition(self, self.states["/FSA/DoSimulation/MicroStepProcessed/ChildNotDetected"], [self.states["/FSA/DoSimulation/MicroStepProcessed/ChildProcessed"]])
+        _FSA_DoSimulation_MicroStepProcessed_ChildNotDetected_0.setAction(self._FSA_DoSimulation_MicroStepProcessed_ChildNotDetected_0_exec)
+        _FSA_DoSimulation_MicroStepProcessed_ChildNotDetected_0.setTrigger(None)
+        self.states["/FSA/DoSimulation/MicroStepProcessed/ChildNotDetected"].addTransition(_FSA_DoSimulation_MicroStepProcessed_ChildNotDetected_0)
+        
+        # transition /FSA/DoSimulation/MicroStepProcessed/ChildDetected
+        _FSA_DoSimulation_MicroStepProcessed_ChildDetected_0 = Transition(self, self.states["/FSA/DoSimulation/MicroStepProcessed/ChildDetected"], [self.states["/FSA/DoSimulation/MicroStepProcessed/ChildInitialized"]])
+        _FSA_DoSimulation_MicroStepProcessed_ChildDetected_0.setAction(self._FSA_DoSimulation_MicroStepProcessed_ChildDetected_0_exec)
+        _FSA_DoSimulation_MicroStepProcessed_ChildDetected_0.setTrigger(None)
+        _FSA_DoSimulation_MicroStepProcessed_ChildDetected_0.setGuard(self._FSA_DoSimulation_MicroStepProcessed_ChildDetected_0_guard)
+        self.states["/FSA/DoSimulation/MicroStepProcessed/ChildDetected"].addTransition(_FSA_DoSimulation_MicroStepProcessed_ChildDetected_0)
+        
+        # transition /FSA/DoSimulation/MicroStepProcessed/ChildInitialized
+        _FSA_DoSimulation_MicroStepProcessed_ChildInitialized_0 = Transition(self, self.states["/FSA/DoSimulation/MicroStepProcessed/ChildInitialized"], [self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/CheckTermination"]])
+        _FSA_DoSimulation_MicroStepProcessed_ChildInitialized_0.setAction(self._FSA_DoSimulation_MicroStepProcessed_ChildInitialized_0_exec)
+        _FSA_DoSimulation_MicroStepProcessed_ChildInitialized_0.setTrigger(None)
+        self.states["/FSA/DoSimulation/MicroStepProcessed/ChildInitialized"].addTransition(_FSA_DoSimulation_MicroStepProcessed_ChildInitialized_0)
+        
+        # transition /FSA/DoSimulation/MicroStepProcessed/CBD/CheckTermination/MacroStepProcessed
+        _FSA_DoSimulation_MicroStepProcessed_CBD_CheckTermination_MacroStepProcessed_0 = Transition(self, self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/CheckTermination/MacroStepProcessed"], [self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/Terminated"]])
+        _FSA_DoSimulation_MicroStepProcessed_CBD_CheckTermination_MacroStepProcessed_0.setAction(self._FSA_DoSimulation_MicroStepProcessed_CBD_CheckTermination_MacroStepProcessed_0_exec)
+        _FSA_DoSimulation_MicroStepProcessed_CBD_CheckTermination_MacroStepProcessed_0.setTrigger(None)
+        _FSA_DoSimulation_MicroStepProcessed_CBD_CheckTermination_MacroStepProcessed_0.setGuard(self._FSA_DoSimulation_MicroStepProcessed_CBD_CheckTermination_MacroStepProcessed_0_guard)
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/CheckTermination/MacroStepProcessed"].addTransition(_FSA_DoSimulation_MicroStepProcessed_CBD_CheckTermination_MacroStepProcessed_0)
+        _FSA_DoSimulation_MicroStepProcessed_CBD_CheckTermination_MacroStepProcessed_1 = Transition(self, self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/CheckTermination/MacroStepProcessed"], [self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation"]])
+        _FSA_DoSimulation_MicroStepProcessed_CBD_CheckTermination_MacroStepProcessed_1.setAction(self._FSA_DoSimulation_MicroStepProcessed_CBD_CheckTermination_MacroStepProcessed_1_exec)
+        _FSA_DoSimulation_MicroStepProcessed_CBD_CheckTermination_MacroStepProcessed_1.setTrigger(None)
+        _FSA_DoSimulation_MicroStepProcessed_CBD_CheckTermination_MacroStepProcessed_1.setGuard(self._FSA_DoSimulation_MicroStepProcessed_CBD_CheckTermination_MacroStepProcessed_1_guard)
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/CheckTermination/MacroStepProcessed"].addTransition(_FSA_DoSimulation_MicroStepProcessed_CBD_CheckTermination_MacroStepProcessed_1)
+        
+        # transition /FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MacroStepPrepared
+        _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MacroStepPrepared_0 = Transition(self, self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MacroStepPrepared"], [self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MicroStepProcessed"]])
+        _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MacroStepPrepared_0.setAction(self._FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MacroStepPrepared_0_exec)
+        _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MacroStepPrepared_0.setTrigger(None)
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MacroStepPrepared"].addTransition(_FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MacroStepPrepared_0)
+        
+        # transition /FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MicroStepProcessed
+        _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepProcessed_0 = Transition(self, self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MicroStepProcessed"], [self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MicroStepPrepared"]])
+        _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepProcessed_0.setAction(self._FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepProcessed_0_exec)
+        _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepProcessed_0.setTrigger(None)
+        _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepProcessed_0.setGuard(self._FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepProcessed_0_guard)
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MicroStepProcessed"].addTransition(_FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepProcessed_0)
+        _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepProcessed_1 = Transition(self, self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MicroStepProcessed"], [self.states["/FSA/DoSimulation/MicroStepProcessed/ChildPaused"]])
+        _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepProcessed_1.setAction(self._FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepProcessed_1_exec)
+        _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepProcessed_1.setTrigger(None)
+        _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepProcessed_1.setGuard(self._FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepProcessed_1_guard)
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MicroStepProcessed"].addTransition(_FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepProcessed_1)
+        
+        # transition /FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MicroStepPrepared
+        _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepPrepared_0 = Transition(self, self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MicroStepPrepared"], [self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MicroStepProcessed"]])
+        _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepPrepared_0.setAction(self._FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepPrepared_0_exec)
+        _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepPrepared_0.setTrigger(None)
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/DoSimulation/MicroStepPrepared"].addTransition(_FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepPrepared_0)
+        
+        # transition /FSA/DoSimulation/MicroStepProcessed/CBD/Terminated
+        _FSA_DoSimulation_MicroStepProcessed_CBD_Terminated_0 = Transition(self, self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/Terminated"], [self.states["/HybridTerminated"]])
+        _FSA_DoSimulation_MicroStepProcessed_CBD_Terminated_0.setAction(self._FSA_DoSimulation_MicroStepProcessed_CBD_Terminated_0_exec)
+        _FSA_DoSimulation_MicroStepProcessed_CBD_Terminated_0.setTrigger(None)
+        self.states["/FSA/DoSimulation/MicroStepProcessed/CBD/Terminated"].addTransition(_FSA_DoSimulation_MicroStepProcessed_CBD_Terminated_0)
+        
+        # transition /FSA/DoSimulation/MicroStepProcessed/ChildPaused
+        _FSA_DoSimulation_MicroStepProcessed_ChildPaused_0 = Transition(self, self.states["/FSA/DoSimulation/MicroStepProcessed/ChildPaused"], [self.states["/FSA/DoSimulation/MicroStepProcessed/NoStateEventDetected"]])
+        _FSA_DoSimulation_MicroStepProcessed_ChildPaused_0.setAction(self._FSA_DoSimulation_MicroStepProcessed_ChildPaused_0_exec)
+        _FSA_DoSimulation_MicroStepProcessed_ChildPaused_0.setTrigger(None)
+        _FSA_DoSimulation_MicroStepProcessed_ChildPaused_0.setGuard(self._FSA_DoSimulation_MicroStepProcessed_ChildPaused_0_guard)
+        self.states["/FSA/DoSimulation/MicroStepProcessed/ChildPaused"].addTransition(_FSA_DoSimulation_MicroStepProcessed_ChildPaused_0)
+        _FSA_DoSimulation_MicroStepProcessed_ChildPaused_1 = Transition(self, self.states["/FSA/DoSimulation/MicroStepProcessed/ChildPaused"], [self.states["/FSA/DoSimulation/MicroStepProcessed/StateEventDetected"]])
+        _FSA_DoSimulation_MicroStepProcessed_ChildPaused_1.setAction(self._FSA_DoSimulation_MicroStepProcessed_ChildPaused_1_exec)
+        _FSA_DoSimulation_MicroStepProcessed_ChildPaused_1.setTrigger(None)
+        _FSA_DoSimulation_MicroStepProcessed_ChildPaused_1.setGuard(self._FSA_DoSimulation_MicroStepProcessed_ChildPaused_1_guard)
+        self.states["/FSA/DoSimulation/MicroStepProcessed/ChildPaused"].addTransition(_FSA_DoSimulation_MicroStepProcessed_ChildPaused_1)
+        
+        # transition /FSA/DoSimulation/MicroStepProcessed/NoStateEventDetected
+        _FSA_DoSimulation_MicroStepProcessed_NoStateEventDetected_0 = Transition(self, self.states["/FSA/DoSimulation/MicroStepProcessed/NoStateEventDetected"], [self.states["/FSA/DoSimulation/MicroStepProcessed/ChildProcessed"]])
+        _FSA_DoSimulation_MicroStepProcessed_NoStateEventDetected_0.setAction(self._FSA_DoSimulation_MicroStepProcessed_NoStateEventDetected_0_exec)
+        _FSA_DoSimulation_MicroStepProcessed_NoStateEventDetected_0.setTrigger(None)
+        self.states["/FSA/DoSimulation/MicroStepProcessed/NoStateEventDetected"].addTransition(_FSA_DoSimulation_MicroStepProcessed_NoStateEventDetected_0)
+        
+        # transition /FSA/DoSimulation/MicroStepProcessed/StateEventDetected
+        _FSA_DoSimulation_MicroStepProcessed_StateEventDetected_0 = Transition(self, self.states["/FSA/DoSimulation/MicroStepProcessed/StateEventDetected"], [self.states["/FSA/DoSimulation/MicroStepProcessed/ChildProcessed"]])
+        _FSA_DoSimulation_MicroStepProcessed_StateEventDetected_0.setAction(self._FSA_DoSimulation_MicroStepProcessed_StateEventDetected_0_exec)
+        _FSA_DoSimulation_MicroStepProcessed_StateEventDetected_0.setTrigger(None)
+        self.states["/FSA/DoSimulation/MicroStepProcessed/StateEventDetected"].addTransition(_FSA_DoSimulation_MicroStepProcessed_StateEventDetected_0)
+        
+        # transition /FSA/DoSimulation/MicroStepProcessed/ChildProcessed
+        _FSA_DoSimulation_MicroStepProcessed_ChildProcessed_0 = Transition(self, self.states["/FSA/DoSimulation/MicroStepProcessed/ChildProcessed"], [self.states["/FSA/DoSimulation/MicroStepPrepared"]])
+        _FSA_DoSimulation_MicroStepProcessed_ChildProcessed_0.setAction(self._FSA_DoSimulation_MicroStepProcessed_ChildProcessed_0_exec)
+        _FSA_DoSimulation_MicroStepProcessed_ChildProcessed_0.setTrigger(None)
+        _FSA_DoSimulation_MicroStepProcessed_ChildProcessed_0.setGuard(self._FSA_DoSimulation_MicroStepProcessed_ChildProcessed_0_guard)
+        self.states["/FSA/DoSimulation/MicroStepProcessed/ChildProcessed"].addTransition(_FSA_DoSimulation_MicroStepProcessed_ChildProcessed_0)
+        _FSA_DoSimulation_MicroStepProcessed_ChildProcessed_1 = Transition(self, self.states["/FSA/DoSimulation/MicroStepProcessed/ChildProcessed"], [self.states["/FSA/CheckTermination"]])
+        _FSA_DoSimulation_MicroStepProcessed_ChildProcessed_1.setAction(self._FSA_DoSimulation_MicroStepProcessed_ChildProcessed_1_exec)
+        _FSA_DoSimulation_MicroStepProcessed_ChildProcessed_1.setTrigger(None)
+        _FSA_DoSimulation_MicroStepProcessed_ChildProcessed_1.setGuard(self._FSA_DoSimulation_MicroStepProcessed_ChildProcessed_1_guard)
+        self.states["/FSA/DoSimulation/MicroStepProcessed/ChildProcessed"].addTransition(_FSA_DoSimulation_MicroStepProcessed_ChildProcessed_1)
+        
+        # transition /FSA/DoSimulation/MicroStepPrepared
+        _FSA_DoSimulation_MicroStepPrepared_0 = Transition(self, self.states["/FSA/DoSimulation/MicroStepPrepared"], [self.states["/FSA/DoSimulation/ParentMicroStepProcessed"]])
+        _FSA_DoSimulation_MicroStepPrepared_0.setAction(self._FSA_DoSimulation_MicroStepPrepared_0_exec)
+        _FSA_DoSimulation_MicroStepPrepared_0.setTrigger(None)
+        self.states["/FSA/DoSimulation/MicroStepPrepared"].addTransition(_FSA_DoSimulation_MicroStepPrepared_0)
+        
+        # transition /FSA/DoSimulation/ParentMicroStepProcessed
+        _FSA_DoSimulation_ParentMicroStepProcessed_0 = Transition(self, self.states["/FSA/DoSimulation/ParentMicroStepProcessed"], [self.states["/FSA/DoSimulation/MacroStepPrepared"]])
+        _FSA_DoSimulation_ParentMicroStepProcessed_0.setAction(self._FSA_DoSimulation_ParentMicroStepProcessed_0_exec)
+        _FSA_DoSimulation_ParentMicroStepProcessed_0.setTrigger(None)
+        self.states["/FSA/DoSimulation/ParentMicroStepProcessed"].addTransition(_FSA_DoSimulation_ParentMicroStepProcessed_0)
+        
         # transition /FSA/Terminated
         _FSA_Terminated_0 = Transition(self, self.states["/FSA/Terminated"], [self.states["/HybridTerminated"]])
         _FSA_Terminated_0.setAction(self._FSA_Terminated_0_exec)
         _FSA_Terminated_0.setTrigger(None)
         self.states["/FSA/Terminated"].addTransition(_FSA_Terminated_0)
         
-        # transition /NoStateEventDetected
-        _NoStateEventDetected_0 = Transition(self, self.states["/NoStateEventDetected"], [self.states["/ChildProcessed"]])
-        _NoStateEventDetected_0.setAction(self._NoStateEventDetected_0_exec)
-        _NoStateEventDetected_0.setTrigger(None)
-        self.states["/NoStateEventDetected"].addTransition(_NoStateEventDetected_0)
-        
-        # transition /StateEventDetected
-        _StateEventDetected_0 = Transition(self, self.states["/StateEventDetected"], [self.states["/ChildProcessed"]])
-        _StateEventDetected_0.setAction(self._StateEventDetected_0_exec)
-        _StateEventDetected_0.setTrigger(None)
-        self.states["/StateEventDetected"].addTransition(_StateEventDetected_0)
-        
-        # transition /ParentPaused
-        _ParentPaused_0 = Transition(self, self.states["/ParentPaused"], [self.states["/ChildDetected"]])
-        _ParentPaused_0.setAction(self._ParentPaused_0_exec)
-        _ParentPaused_0.setTrigger(None)
-        _ParentPaused_0.setGuard(self._ParentPaused_0_guard)
-        self.states["/ParentPaused"].addTransition(_ParentPaused_0)
-        _ParentPaused_1 = Transition(self, self.states["/ParentPaused"], [self.states["/ChildProcessed"]])
-        _ParentPaused_1.setAction(self._ParentPaused_1_exec)
-        _ParentPaused_1.setTrigger(None)
-        _ParentPaused_1.setGuard(self._ParentPaused_1_guard)
-        self.states["/ParentPaused"].addTransition(_ParentPaused_1)
-        
         # transition /ParentStarted
         _ParentStarted_0 = Transition(self, self.states["/ParentStarted"], [self.states["/FSA/Initialized"]])
         _ParentStarted_0.setAction(self._ParentStarted_0_exec)
         _ParentStarted_0.setTrigger(None)
         self.states["/ParentStarted"].addTransition(_ParentStarted_0)
-        
-        # transition /CBD/Initialized
-        _CBD_Initialized_0 = Transition(self, self.states["/CBD/Initialized"], [self.states["/CBD/MacroStepProcessed"]])
-        _CBD_Initialized_0.setAction(self._CBD_Initialized_0_exec)
-        _CBD_Initialized_0.setTrigger(None)
-        self.states["/CBD/Initialized"].addTransition(_CBD_Initialized_0)
-        
-        # transition /CBD/Started
-        _CBD_Started_0 = Transition(self, self.states["/CBD/Started"], [self.states["/CBD/Initialized"]])
-        _CBD_Started_0.setAction(self._CBD_Started_0_exec)
-        _CBD_Started_0.setTrigger(None)
-        self.states["/CBD/Started"].addTransition(_CBD_Started_0)
-        
-        # transition /CBD/MicroStepProcessed
-        _CBD_MicroStepProcessed_0 = Transition(self, self.states["/CBD/MicroStepProcessed"], [self.states["/CBD/MicroStepPrepared"]])
-        _CBD_MicroStepProcessed_0.setAction(self._CBD_MicroStepProcessed_0_exec)
-        _CBD_MicroStepProcessed_0.setTrigger(None)
-        _CBD_MicroStepProcessed_0.setGuard(self._CBD_MicroStepProcessed_0_guard)
-        self.states["/CBD/MicroStepProcessed"].addTransition(_CBD_MicroStepProcessed_0)
-        _CBD_MicroStepProcessed_1 = Transition(self, self.states["/CBD/MicroStepProcessed"], [self.states["/CBD/MacroStepProcessed"]])
-        _CBD_MicroStepProcessed_1.setAction(self._CBD_MicroStepProcessed_1_exec)
-        _CBD_MicroStepProcessed_1.setTrigger(None)
-        _CBD_MicroStepProcessed_1.setGuard(self._CBD_MicroStepProcessed_1_guard)
-        self.states["/CBD/MicroStepProcessed"].addTransition(_CBD_MicroStepProcessed_1)
-        _CBD_MicroStepProcessed_2 = Transition(self, self.states["/CBD/MicroStepProcessed"], [self.states["/ChildPaused"]])
-        _CBD_MicroStepProcessed_2.setAction(self._CBD_MicroStepProcessed_2_exec)
-        _CBD_MicroStepProcessed_2.setTrigger(None)
-        _CBD_MicroStepProcessed_2.setGuard(self._CBD_MicroStepProcessed_2_guard)
-        self.states["/CBD/MicroStepProcessed"].addTransition(_CBD_MicroStepProcessed_2)
-        
-        # transition /CBD/MacroStepPrepared
-        _CBD_MacroStepPrepared_0 = Transition(self, self.states["/CBD/MacroStepPrepared"], [self.states["/CBD/MicroStepProcessed"]])
-        _CBD_MacroStepPrepared_0.setAction(self._CBD_MacroStepPrepared_0_exec)
-        _CBD_MacroStepPrepared_0.setTrigger(None)
-        self.states["/CBD/MacroStepPrepared"].addTransition(_CBD_MacroStepPrepared_0)
-        
-        # transition /CBD/MacroStepProcessed
-        _CBD_MacroStepProcessed_0 = Transition(self, self.states["/CBD/MacroStepProcessed"], [self.states["/CBD/Terminated"]])
-        _CBD_MacroStepProcessed_0.setAction(self._CBD_MacroStepProcessed_0_exec)
-        _CBD_MacroStepProcessed_0.setTrigger(None)
-        _CBD_MacroStepProcessed_0.setGuard(self._CBD_MacroStepProcessed_0_guard)
-        self.states["/CBD/MacroStepProcessed"].addTransition(_CBD_MacroStepProcessed_0)
-        _CBD_MacroStepProcessed_1 = Transition(self, self.states["/CBD/MacroStepProcessed"], [self.states["/CBD/MacroStepPrepared"]])
-        _CBD_MacroStepProcessed_1.setAction(self._CBD_MacroStepProcessed_1_exec)
-        _CBD_MacroStepProcessed_1.setTrigger(None)
-        _CBD_MacroStepProcessed_1.setGuard(self._CBD_MacroStepProcessed_1_guard)
-        self.states["/CBD/MacroStepProcessed"].addTransition(_CBD_MacroStepProcessed_1)
-        
-        # transition /CBD/Terminated
-        _CBD_Terminated_0 = Transition(self, self.states["/CBD/Terminated"], [self.states["/HybridTerminated"]])
-        _CBD_Terminated_0.setAction(self._CBD_Terminated_0_exec)
-        _CBD_Terminated_0.setTrigger(None)
-        self.states["/CBD/Terminated"].addTransition(_CBD_Terminated_0)
-        
-        # transition /CBD/MicroStepPrepared
-        _CBD_MicroStepPrepared_0 = Transition(self, self.states["/CBD/MicroStepPrepared"], [self.states["/CBD/MicroStepProcessed"]])
-        _CBD_MicroStepPrepared_0.setAction(self._CBD_MicroStepPrepared_0_exec)
-        _CBD_MicroStepPrepared_0.setTrigger(None)
-        self.states["/CBD/MicroStepPrepared"].addTransition(_CBD_MicroStepPrepared_0)
-    
-    def _ChildPaused_0_exec(self, parameters):
-        print('From ChildPaused to NoStateEventDetected... ')
-    
-    def _ChildPaused_0_guard(self, parameters):
-        return self.weaved_triggered_when_transition == None
-    
-    def _ChildPaused_1_exec(self, parameters):
-        print('From ChildPaused to StateEventDetected... ')
-    
-    def _ChildPaused_1_guard(self, parameters):
-        return self.weaved_triggered_when_transition != None
-    
-    def _ParentMicroStepProcessed_0_exec(self, parameters):
-        print('From ParentMicroStepProcessed to ParentPaused and resetting the child... ')
-        self.woven_child_initialized = False
-    
-    def _ChildNotInitialized_0_exec(self, parameters):
-        print('From ChildNotInitialized to CBD/Started... ')
-        self.cbd_delta = self.weaved_delta
-        self.updateCBDState()
-        self.woven_child_initialized = True
-    
-    def _ChildDetected_0_exec(self, parameters):
-        print('From ChildDetected to ChildInitialized... ')
-    
-    def _ChildDetected_0_guard(self, parameters):
-        return self.woven_child_initialized
-    
-    def _ChildDetected_1_exec(self, parameters):
-        print('From ChildDetected to ChildNotInitialized... ')
-    
-    def _ChildDetected_1_guard(self, parameters):
-        return not self.woven_child_initialized
-    
-    def _ChildProcessed_0_exec(self, parameters):
-        print('From ChildProcessed to FSA/MicroStepProcessed... ')
-    
-    def _ChildInitialized_0_exec(self, parameters):
-        print('From ChildInitialized to CBD/MacroStepProcessed... ')
-        self.cbd_clock = self.cbd_clock + self.cbd_delta
-        self.cbd_iteration = self.cbd_iteration + 1
-        self.cbd_controller.advanceTimeStep()
-        print('CBD clock: ' + str(self.cbd_clock))
-        print('CBD iteration: ' + str(self.cbd_iteration))
-    
-    def _FSA_MacroStepPrepared_0_exec(self, parameters):
-        print('From FSA/MacroStepPrepared to ParentPaused... ')
-    
-    def _FSA_MicroStepPrepared_0_exec(self, parameters):
-        print('From FSA/MicroStepPrepared to ParentMicroStepProcessed and attempting to take transition... ')
-        print('Transition to be taken: ' + str(self.fsa_selectedTransition))
-        self.fsa_currentState = self.fsa_selectedTransition.target
-        self.fsa_elapsed = 0
-        self.fsa_processEvent(self.fsa_currentEvent)
-        self.weaved_lib.dumpDiscreteEvent(self.weaved_model, self.fsa_logicalTime, self.fsa_currentState, self.fsa_selectedTransition)
-        self.weaved_lib.dumpGlobalState(self.weaved_model, self.weaved_global_state, self.fsa_logicalTime, self.fsa_currentState)
-        print('New state: ' + str(self.fsa_currentState))
-        print('Reading events:')
-        self.fsa_currentEvent = self.fsa_getInputEventAt(self.fsa_logicalTime)
-        self.fsa_selectedTransition = self.weaved_model.getTransitionFrom(self.fsa_currentState, self.fsa_currentEvent, self.fsa_elapsed)
-        print(self.fsa_currentEvent)
-        print(self.fsa_selectedTransition)
-    
-    def _FSA_Initialized_0_exec(self, parameters):
-        print('From FSA/Initialized to FSA/CheckTermination... ')
-    
-    def _FSA_MicroStepProcessed_0_exec(self, parameters):
-        print('From FSA/MicroStepProcessed to MicroStepPrepared... ')
-    
-    def _FSA_MicroStepProcessed_0_guard(self, parameters):
-        return self.fsa_selectedTransition != None
-    
-    def _FSA_MicroStepProcessed_1_exec(self, parameters):
-        print('From FSA/MicroStepProcessed to FSA/CheckTermination and advancing time... ')
-        self.fsa_logicalTime = self.fsa_logicalTime + self.fsa_timestep
-        self.fsa_elapsed = self.fsa_elapsed + self.fsa_timestep
-        print(self.fsa_logicalTime)
-        print(self.fsa_elapsed)
-    
-    def _FSA_MicroStepProcessed_1_guard(self, parameters):
-        return self.fsa_selectedTransition == None
     
     def _FSA_Started_0_exec(self, parameters):
         print('From FSA/Started to ParentStarted... ')
@@ -529,12 +519,16 @@ class Weaved_CBD_FSA_Simulator(RuntimeClassBase):
         self.fsa_timestep = self.weaved_delta
         self.fsa_currentState = self.weaved_model.initialState
     
+    def _FSA_Initialized_0_exec(self, parameters):
+        print('From FSA/Initialized to FSA/CheckTermination... ')
+    
     def _FSA_CheckTermination_MacroStepProcessed_0_exec(self, parameters):
-        print('From FSA/CheckTermination/MacroStepProcessed to FSA/MacroStepPrepared and reading events... ')
+        print('From FSA/CheckTermination/MacroStepProcessed to FSA/DoSimulation and reading events... ')
         self.fsa_currentEvent = self.fsa_getInputEventAt(self.fsa_logicalTime)
         self.fsa_selectedTransition = self.weaved_model.getTransitionFrom(self.fsa_currentState, self.fsa_currentEvent, self.fsa_elapsed)
-        print(self.fsa_currentEvent)
-        print(self.fsa_selectedTransition)
+        print('Current event:' + str(self.fsa_currentEvent))
+        print('Current transition:' + str(self.fsa_selectedTransition))
+        print('Child detected?:' + str(isinstance(self.fsa_currentState, CBDState)))
     
     def _FSA_CheckTermination_MacroStepProcessed_0_guard(self, parameters):
         return not self.fsa_currentState.final
@@ -545,40 +539,44 @@ class Weaved_CBD_FSA_Simulator(RuntimeClassBase):
     def _FSA_CheckTermination_MacroStepProcessed_1_guard(self, parameters):
         return self.fsa_currentState.final
     
-    def _FSA_Terminated_0_exec(self, parameters):
-        print('From FSA/Terminated to HybridTerminated... ')
-    
-    def _NoStateEventDetected_0_exec(self, parameters):
-        print('From NoStateEventDetected to ChildProcessed... ')
-    
-    def _StateEventDetected_0_exec(self, parameters):
-        print('From StateEventDetected to ChildProcessed... ')
-        if self.fsa_selectedTransition == None:
-        	self.fsa_selectedTransition = self.weaved_triggered_when_transition
-    
-    def _ParentPaused_0_exec(self, parameters):
-        print('From ParentPaused to ChildDetected... ')
+    def _FSA_DoSimulation_MacroStepPrepared_ParentPaused_0_exec(self, parameters):
+        print('From FSA/ParentPaused to FSA/ChildDetected... ')
         self.cbd_model = self.fsa_currentState.cbd
     
-    def _ParentPaused_0_guard(self, parameters):
+    def _FSA_DoSimulation_MacroStepPrepared_ParentPaused_0_guard(self, parameters):
         return isinstance(self.fsa_currentState, CBDState)
     
-    def _ParentPaused_1_exec(self, parameters):
-        print('From ParentPaused to ChildProcessed without any child to process... ')
+    def _FSA_DoSimulation_MacroStepPrepared_ParentPaused_1_exec(self, parameters):
+        print('From ParentPaused to ChildNotDetected without any child to process... ')
     
-    def _ParentPaused_1_guard(self, parameters):
+    def _FSA_DoSimulation_MacroStepPrepared_ParentPaused_1_guard(self, parameters):
         return not isinstance(self.fsa_currentState, CBDState)
     
-    def _ParentStarted_0_exec(self, parameters):
-        print('From ParentStarted to FSA/Initialized... ')
-        self.weaved_global_state = dict()
-        self.weaved_previous_global_state = dict()
-        self.woven_child_initialized = False
+    def _FSA_DoSimulation_MacroStepPrepared_ChildNotDetected_0_exec(self, parameters):
+        print('From ChildNotDetected to ChildProcessed... ')
+    
+    def _FSA_DoSimulation_MacroStepPrepared_ChildDetected_0_exec(self, parameters):
+        print('From ChildDetected to ChildInitialized... ')
     
-    def _CBD_Initialized_0_exec(self, parameters):
-        print('From CBD/Initialized to MacroStepProcessed... ')
+    def _FSA_DoSimulation_MacroStepPrepared_ChildDetected_0_guard(self, parameters):
+        return self.woven_child_initialized
     
-    def _CBD_Started_0_exec(self, parameters):
+    def _FSA_DoSimulation_MacroStepPrepared_ChildDetected_1_exec(self, parameters):
+        print('From ChildDetected to ChildNotInitialized... ')
+    
+    def _FSA_DoSimulation_MacroStepPrepared_ChildDetected_1_guard(self, parameters):
+        return not self.woven_child_initialized
+    
+    def _FSA_DoSimulation_MacroStepPrepared_ChildInitialized_0_exec(self, parameters):
+        print('From ChildInitialized to ChildProcessed... ')
+    
+    def _FSA_DoSimulation_MacroStepPrepared_ChildNotInitialized_0_exec(self, parameters):
+        print('From ChildNotInitialized to CBD/Started... ')
+        self.cbd_delta = self.weaved_delta
+        self.updateCBDState()
+        self.woven_child_initialized = True
+    
+    def _FSA_DoSimulation_MacroStepPrepared_CBD_Started_0_exec(self, parameters):
         print('From CBD/Started to Initialized... ')
         print('Performing initialization...')
         self.cbd_iteration = 0
@@ -587,58 +585,147 @@ class Weaved_CBD_FSA_Simulator(RuntimeClassBase):
         self.cbd_controller.initSimulation()
         print('Performing initialization... DONE')
     
-    def _CBD_MicroStepProcessed_0_exec(self, parameters):
-        print('From CBD/MicroStepProcessed to MicroStepPrepared')
+    def _FSA_DoSimulation_MacroStepPrepared_CBD_Initialized_0_exec(self, parameters):
+        print('From CBD/Initialized to ChildInitialized... ')
     
-    def _CBD_MicroStepProcessed_0_guard(self, parameters):
-        return self.cbd_hasNextStrongComponent()
+    def _FSA_DoSimulation_MacroStepPrepared_ChildProcessed_0_exec(self, parameters):
+        print('From MacroStepPrepared/ChildProcessed to MicroStepProcessed... ')
     
-    def _CBD_MicroStepProcessed_1_exec(self, parameters):
-        print('From CBD/MicroStepProcessed to MacroStepProcessed and advancing time... ')
-        self.cbd_clock = self.cbd_clock + self.cbd_delta
-        self.cbd_iteration = self.cbd_iteration + 1
-        self.cbd_controller.advanceTimeStep()
-        print('CBD clock: ' + str(self.cbd_clock))
-        print('CBD iteration: ' + str(self.cbd_iteration))
+    def _FSA_DoSimulation_MicroStepProcessed_ParentPaused_0_exec(self, parameters):
+        print('From FSA/ParentPaused to FSA/ChildDetected... ')
+        self.cbd_model = self.fsa_currentState.cbd
     
-    def _CBD_MicroStepProcessed_1_guard(self, parameters):
-        return not self.cbd_hasNextStrongComponent() and False
+    def _FSA_DoSimulation_MicroStepProcessed_ParentPaused_0_guard(self, parameters):
+        return isinstance(self.fsa_currentState, CBDState)
     
-    def _CBD_MicroStepProcessed_2_exec(self, parameters):
-        print('From CBD/MicroStepProcessed to ChildPaused and detecting triggered transitions... ')
-        self.updateGlobalState()
-        self.weaved_lib.dumpGlobalState(self.weaved_model, self.weaved_global_state, self.fsa_logicalTime, self.fsa_currentState)
-        self.weaved_triggered_when_transition = self.getTriggeredWhenTransition()
+    def _FSA_DoSimulation_MicroStepProcessed_ParentPaused_1_exec(self, parameters):
+        print('From ParentPaused to ChildNotDetected without any child to process... ')
     
-    def _CBD_MicroStepProcessed_2_guard(self, parameters):
-        return not self.cbd_hasNextStrongComponent()
+    def _FSA_DoSimulation_MicroStepProcessed_ParentPaused_1_guard(self, parameters):
+        return not isinstance(self.fsa_currentState, CBDState)
     
-    def _CBD_MacroStepPrepared_0_exec(self, parameters):
-        print('From CBD/MacroStepPrepared to MicroStepProcessed... ')
+    def _FSA_DoSimulation_MicroStepProcessed_ChildNotDetected_0_exec(self, parameters):
+        print('From ChildNotDetected to ChildProcessed... ')
+    
+    def _FSA_DoSimulation_MicroStepProcessed_ChildDetected_0_exec(self, parameters):
+        print('From ChildDetected to ChildInitialized... ')
+    
+    def _FSA_DoSimulation_MicroStepProcessed_ChildDetected_0_guard(self, parameters):
+        return self.woven_child_initialized
+    
+    def _FSA_DoSimulation_MicroStepProcessed_ChildInitialized_0_exec(self, parameters):
+        print('From ChildInitialized to ChildProcessed... ')
     
-    def _CBD_MacroStepProcessed_0_exec(self, parameters):
+    def _FSA_DoSimulation_MicroStepProcessed_CBD_CheckTermination_MacroStepProcessed_0_exec(self, parameters):
         print('From CBD/MacroStepProcessed to Terminated... ')
     
-    def _CBD_MacroStepProcessed_0_guard(self, parameters):
+    def _FSA_DoSimulation_MicroStepProcessed_CBD_CheckTermination_MacroStepProcessed_0_guard(self, parameters):
         return self.cbd_maxIterationsReached()
     
-    def _CBD_MacroStepProcessed_1_exec(self, parameters):
+    def _FSA_DoSimulation_MicroStepProcessed_CBD_CheckTermination_MacroStepProcessed_1_exec(self, parameters):
         print('From CBD/MacroStepProcessed to MacroStepPrepared... ')
         self.cbd_currentCompIdx = 0
         self.cbd_depGraph = self.cbd_controller.createDepGraph(self.cbd_iteration)
         self.cbd_strongComponentList = self.cbd_controller.createStrongComponents(self.cbd_depGraph, self.cbd_iteration)
     
-    def _CBD_MacroStepProcessed_1_guard(self, parameters):
+    def _FSA_DoSimulation_MicroStepProcessed_CBD_CheckTermination_MacroStepProcessed_1_guard(self, parameters):
         return not self.cbd_maxIterationsReached()
     
-    def _CBD_Terminated_0_exec(self, parameters):
-        print('From CBD/Terminated to HybridTerminated... ')
+    def _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MacroStepPrepared_0_exec(self, parameters):
+        print('From CBD/MacroStepPrepared to MicroStepProcessed... ')
+    
+    def _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepProcessed_0_exec(self, parameters):
+        print('From CBD/MicroStepProcessed to MicroStepPrepared')
     
-    def _CBD_MicroStepPrepared_0_exec(self, parameters):
+    def _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepProcessed_0_guard(self, parameters):
+        return self.cbd_hasNextStrongComponent()
+    
+    def _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepProcessed_1_exec(self, parameters):
+        print('From CBD/MicroStepProcessed to ChildPaused and detecting triggered transitions... ')
+        self.updateGlobalState()
+        self.weaved_lib.dumpGlobalState(self.weaved_model, self.weaved_global_state, self.fsa_logicalTime, self.fsa_currentState)
+        self.weaved_triggered_when_transition = self.getTriggeredWhenTransition()
+        self.cbd_clock = self.cbd_clock + self.cbd_delta
+        self.cbd_iteration = self.cbd_iteration + 1
+        self.cbd_controller.advanceTimeStep()
+        print('CBD clock: ' + str(self.cbd_clock))
+        print('CBD iteration: ' + str(self.cbd_iteration))
+    
+    def _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepProcessed_1_guard(self, parameters):
+        return not self.cbd_hasNextStrongComponent()
+    
+    def _FSA_DoSimulation_MicroStepProcessed_CBD_DoSimulation_MicroStepPrepared_0_exec(self, parameters):
         print('From CBD/MicroStepPrepared to MicroStepProcessed...')
         self.cbd_computeBlock()
         self.cbd_currentCompIdx = self.cbd_currentCompIdx + 1
     
+    def _FSA_DoSimulation_MicroStepProcessed_CBD_Terminated_0_exec(self, parameters):
+        print('From CBD/Terminated to HybridTerminated... ')
+    
+    def _FSA_DoSimulation_MicroStepProcessed_ChildPaused_0_exec(self, parameters):
+        print('From ChildPaused to NoStateEventDetected... ')
+    
+    def _FSA_DoSimulation_MicroStepProcessed_ChildPaused_0_guard(self, parameters):
+        return self.weaved_triggered_when_transition == None
+    
+    def _FSA_DoSimulation_MicroStepProcessed_ChildPaused_1_exec(self, parameters):
+        print('From ChildPaused to StateEventDetected... ')
+    
+    def _FSA_DoSimulation_MicroStepProcessed_ChildPaused_1_guard(self, parameters):
+        return self.weaved_triggered_when_transition != None
+    
+    def _FSA_DoSimulation_MicroStepProcessed_NoStateEventDetected_0_exec(self, parameters):
+        print('From NoStateEventDetected to ChildProcessed... ')
+    
+    def _FSA_DoSimulation_MicroStepProcessed_StateEventDetected_0_exec(self, parameters):
+        print('From StateEventDetected to ChildProcessed... ')
+        if self.fsa_selectedTransition == None:
+        	self.fsa_selectedTransition = self.weaved_triggered_when_transition
+    
+    def _FSA_DoSimulation_MicroStepProcessed_ChildProcessed_0_exec(self, parameters):
+        print('From FSA/MicroStepProcessed/ChildProcessed to MicroStepPrepared... ')
+    
+    def _FSA_DoSimulation_MicroStepProcessed_ChildProcessed_0_guard(self, parameters):
+        return self.fsa_selectedTransition != None
+    
+    def _FSA_DoSimulation_MicroStepProcessed_ChildProcessed_1_exec(self, parameters):
+        print('From FSA/MicroStepProcessed/ChildProcessed to FSA/CheckTermination and advancing time... ')
+        self.fsa_logicalTime = self.fsa_logicalTime + self.fsa_timestep
+        self.fsa_elapsed = self.fsa_elapsed + self.fsa_timestep
+        print(self.fsa_logicalTime)
+        print(self.fsa_elapsed)
+    
+    def _FSA_DoSimulation_MicroStepProcessed_ChildProcessed_1_guard(self, parameters):
+        return self.fsa_selectedTransition == None
+    
+    def _FSA_DoSimulation_MicroStepPrepared_0_exec(self, parameters):
+        print('From FSA/MicroStepPrepared to ParentMicroStepProcessed and attempting to take transition... ')
+        print('Transition to be taken: ' + str(self.fsa_selectedTransition))
+        self.fsa_currentState = self.fsa_selectedTransition.target
+        self.fsa_elapsed = 0
+        self.fsa_processEvent(self.fsa_currentEvent)
+        self.weaved_lib.dumpDiscreteEvent(self.weaved_model, self.fsa_logicalTime, self.fsa_currentState, self.fsa_selectedTransition)
+        self.weaved_lib.dumpGlobalState(self.weaved_model, self.weaved_global_state, self.fsa_logicalTime, self.fsa_currentState)
+        print('New state: ' + str(self.fsa_currentState))
+        print('Reading events:')
+        self.fsa_currentEvent = self.fsa_getInputEventAt(self.fsa_logicalTime)
+        self.fsa_selectedTransition = self.weaved_model.getTransitionFrom(self.fsa_currentState, self.fsa_currentEvent, self.fsa_elapsed)
+        print(self.fsa_currentEvent)
+        print(self.fsa_selectedTransition)
+    
+    def _FSA_DoSimulation_ParentMicroStepProcessed_0_exec(self, parameters):
+        print('From ParentMicroStepProcessed to ParentPaused and resetting the child... ')
+        self.woven_child_initialized = False
+    
+    def _FSA_Terminated_0_exec(self, parameters):
+        print('From FSA/Terminated to HybridTerminated... ')
+    
+    def _ParentStarted_0_exec(self, parameters):
+        print('From ParentStarted to FSA/Initialized... ')
+        self.weaved_global_state = dict()
+        self.weaved_previous_global_state = dict()
+        self.woven_child_initialized = False
+    
     def initializeStatechart(self):
         # enter default state
         self.default_targets = self.states["/FSA"].getEffectiveTargetStates()

+ 0 - 492
fsa_cbd_composition/fsa_cbd_simulator/weaved_cbd_fsa_simulator.py.xml

@@ -1,492 +0,0 @@
-<?xml version="1.0" ?>
-<diagram name="Weaved_CBD_FSA_Simulator_Manual" author="Sadaf Mustafiz and Bruno Barroca and Claudio Gomes">
-	<description>
-		Automatically woven CBD and FSA simulators with the FSA being the dominant.
-	</description>
-	<top>
-		from sccd.runtime.libs.ui import *
-		from sccd.runtime.libs.utils import *
-		import copy
-		from CBD_Controller import CBDController
-		import Options
-		from fsa_cbd_weaved_classes import CBDState
-		from weaved_cbd_fsa_lib import FSACBDLib
-	</top>
-	<class name="Weaved_CBD_FSA_Simulator" default="True">
-		<attribute name="weaved_global_state"/>
-		<attribute name="fsa_elapsed"/>
-		<attribute name="cbd_options"/>
-		<attribute name="weaved_lib"/>
-		<attribute name="woven_child_initialized"/>
-		<attribute name="cbd_clock"/>
-		<attribute name="fsa_currentEvent"/>
-		<attribute name="weaved_delta"/>
-		<attribute name="weaved_model"/>
-		<attribute name="cbd_controller"/>
-		<attribute name="fsa_timestep"/>
-		<attribute name="cbd_currentCompIdx"/>
-		<attribute name="fsa_eventList"/>
-		<attribute name="cbd_depGraph"/>
-		<attribute name="fsa_selectedTransition"/>
-		<attribute name="cbd_strongComponentList"/>
-		<attribute name="weaved_previous_global_state"/>
-		<attribute name="cbd_delta"/>
-		<attribute name="weaved_triggered_when_transition"/>
-		<attribute name="cbd_iteration"/>
-		<attribute name="fsa_logicalTime"/>
-		<attribute name="fsa_currentState"/>
-		<method name="Weaved_CBD_FSA_Simulator">
-			<parameter name="cbd_options"/>
-			<parameter name="amodel"/>
-			<parameter name="fsa_events"/>
-			<body>
-			<![CDATA[
-				self.weaved_lib = FSACBDLib()
-				self.cbd_options = cbd_options
-				self.cbd_delta = self.cbd_options.getDeltaT()
-				self.weaved_model = amodel
-				self.fsa_eventList = fsa_events
-				self.fsa_timestep = 1.0
-			]]>
-			</body>
-		</method>
-		<method name="fsa_processEvent">
-			<parameter name="event"/>
-			<body>
-			<![CDATA[
-				if (event != None):
-					self.fsa_eventList.popEvent(event)
-					event.processed = True
-			]]>
-			</body>
-		</method>
-		<method name="updateCBDState">
-			<body>
-			<![CDATA[
-				self.weaved_lib.updateCBDState(self.weaved_global_state, self.fsa_currentState.cbd)
-			]]>
-			</body>
-		</method>
-		<method name="cbd_maxIterationsReached">
-			<body>
-			<![CDATA[
-				return self.cbd_iteration >= self.cbd_options.getMaxIterations()
-			]]>
-			</body>
-		</method>
-		<method name="fsa_getInputEventAt">
-			<parameter name="time"/>
-			<body>
-			<![CDATA[
-				return self.fsa_eventList.getInputAt(time)
-			]]>
-			</body>
-		</method>
-		<method name="cbd_computeBlock">
-			<body>
-			<![CDATA[
-				if self.cbd_currentComponentIsCycle():
-					self.cbd_controller.computeNextAlgebraicLoop(self.cbd_strongComponentList[self.cbd_currentCompIdx], self.cbd_iteration)
-				else:
-					self.cbd_controller.computeNextBlock(self.cbd_strongComponentList[self.cbd_currentCompIdx], self.cbd_iteration)
-			]]>
-			</body>
-		</method>
-		<method name="updateGlobalState">
-			<body>
-			<![CDATA[
-				self.weaved_previous_global_state = copy.deepcopy(self.weaved_global_state)
-				self.weaved_lib.updateGlobalState(self.weaved_global_state, self.fsa_currentState.cbd, self.cbd_clock)
-			]]>
-			</body>
-		</method>
-		<method name="cbd_currentComponentIsCycle">
-			<body>
-			<![CDATA[
-				return self.cbd_controller.componentIsCycle(self.cbd_strongComponentList[self.cbd_currentCompIdx], self.cbd_depGraph)
-			]]>
-			</body>
-		</method>
-		<method name="cbd_hasNextStrongComponent">
-			<body>
-			<![CDATA[
-				return (self.cbd_currentCompIdx) < len(self.cbd_strongComponentList)
-			]]>
-			</body>
-		</method>
-		<method name="getTriggeredWhenTransition">
-			<body>
-			<![CDATA[
-				return self.weaved_lib.getTriggeredWhenTransition(self.weaved_model, self.fsa_currentState, self.weaved_global_state, self.weaved_previous_global_state)
-			]]>
-			</body>
-		</method>
-		<scxml  initial="FSA" final="HybridTerminated">
-			<state id="ChildPaused">
-				<transition target="../NoStateEventDetected" cond="self.weaved_triggered_when_transition == None">
-					<script>
-						<![CDATA[
-							print('From ChildPaused to NoStateEventDetected... ')
-						]]>
-					</script>
-				</transition>
-				<transition target="../StateEventDetected" cond="self.weaved_triggered_when_transition != None">
-					<script>
-						<![CDATA[
-							print('From ChildPaused to StateEventDetected... ')
-						]]>
-					</script>
-				</transition>
-			</state>
-			<state id="ParentMicroStepProcessed">
-				<transition target="../ParentPaused">
-					<script>
-						<![CDATA[
-							print('From ParentMicroStepProcessed to ParentPaused and resetting the child... ')
-							self.woven_child_initialized = False
-						]]>
-					</script>
-				</transition>
-			</state>
-			<state id="ChildNotInitialized">
-				<transition target="../CBD/Started">
-					<script>
-						<![CDATA[
-							print('From ChildNotInitialized to CBD/Started... ')
-							self.cbd_delta = self.weaved_delta
-							self.updateCBDState()
-							self.woven_child_initialized = True
-						]]>
-					</script>
-				</transition>
-			</state>
-			<state id="ChildDetected">
-				<transition target="../ChildInitialized" cond="self.woven_child_initialized">
-					<script>
-						<![CDATA[
-							print('From ChildDetected to ChildInitialized... ')
-						]]>
-					</script>
-				</transition>
-				<transition target="../ChildNotInitialized" cond="not self.woven_child_initialized">
-					<script>
-						<![CDATA[
-							print('From ChildDetected to ChildNotInitialized... ')
-						]]>
-					</script>
-				</transition>
-			</state>
-			<state id="ChildProcessed">
-				<transition target="../FSA/MicroStepProcessed">
-					<script>
-						<![CDATA[
-							print('From ChildProcessed to FSA/MicroStepProcessed... ')
-						]]>
-					</script>
-				</transition>
-			</state>
-			<state id="ChildInitialized">
-				<transition target="../CBD/MacroStepProcessed">
-					<script>
-						<![CDATA[
-							print('From ChildInitialized to CBD/MacroStepProcessed... ')
-							self.cbd_clock = self.cbd_clock + self.cbd_delta
-							self.cbd_iteration = self.cbd_iteration + 1
-							self.cbd_controller.advanceTimeStep()
-							print('CBD clock: ' + str(self.cbd_clock))
-							print('CBD iteration: ' + str(self.cbd_iteration))
-						]]>
-					</script>
-				</transition>
-			</state>
-			<state id="HybridTerminated">
-			</state>
-			<state id="FSA" initial="Started">
-				<state id="MacroStepPrepared">
-					<transition target="../../ParentPaused">
-						<script>
-							<![CDATA[
-								print('From FSA/MacroStepPrepared to ParentPaused... ')
-							]]>
-						</script>
-					</transition>
-					<transition target="../MicroStepProcessed" cond="False">
-						<script>
-							<![CDATA[
-								print('From FSA/MacroStepPrepared to MicroStepProcessed... ')
-							]]>
-						</script>
-					</transition>
-				</state>
-				<state id="MicroStepPrepared">
-					<transition target="../../ParentMicroStepProcessed">
-						<script>
-							<![CDATA[
-								print('From FSA/MicroStepPrepared to ParentMicroStepProcessed and attempting to take transition... ')
-								print('Transition to be taken: ' + str(self.fsa_selectedTransition))
-								self.fsa_currentState = self.fsa_selectedTransition.target
-								self.fsa_elapsed = 0
-								self.fsa_processEvent(self.fsa_currentEvent)
-								self.weaved_lib.dumpDiscreteEvent(self.weaved_model, self.fsa_logicalTime, self.fsa_currentState, self.fsa_selectedTransition)
-								self.weaved_lib.dumpGlobalState(self.weaved_model, self.weaved_global_state, self.fsa_logicalTime, self.fsa_currentState)
-								print('New state: ' + str(self.fsa_currentState))
-								print('Reading events:')
-								self.fsa_currentEvent = self.fsa_getInputEventAt(self.fsa_logicalTime)
-								self.fsa_selectedTransition = self.weaved_model.getTransitionFrom(self.fsa_currentState, self.fsa_currentEvent, self.fsa_elapsed)
-								print(self.fsa_currentEvent)
-								print(self.fsa_selectedTransition)
-							]]>
-						</script>
-					</transition>
-					<transition target="../MicroStepProcessed" cond="False">
-						<script>
-							<![CDATA[
-								print('From FSA/MicroStepPrepared to MicroStepProcessed and attempting to take transition... ')
-								print('Transition to be taken: ' + str(self.fsa_selectedTransition))
-								self.fsa_currentState = self.fsa_selectedTransition.target
-								self.fsa_elapsed = 0
-								self.fsa_processEvent(self.fsa_currentEvent)
-								self.weaved_lib.dumpDiscreteEvent(self.weaved_model, self.fsa_logicalTime, self.fsa_currentState, self.fsa_selectedTransition)
-								self.weaved_lib.dumpGlobalState(self.weaved_model, self.weaved_global_state, self.fsa_logicalTime, self.fsa_currentState)
-								print('New state: ' + str(self.fsa_currentState))
-								print('Reading events:')
-								self.fsa_currentEvent = self.fsa_getInputEventAt(self.fsa_logicalTime)
-								self.fsa_selectedTransition = self.weaved_model.getTransitionFrom(self.fsa_currentState, self.fsa_currentEvent, self.fsa_elapsed)
-								print(self.fsa_currentEvent)
-								print(self.fsa_selectedTransition)
-							]]>
-						</script>
-					</transition>
-				</state>
-				<state id="Initialized">
-					<transition target="../CheckTermination">
-						<script>
-							<![CDATA[
-								print('From FSA/Initialized to FSA/CheckTermination... ')
-							]]>
-						</script>
-					</transition>
-				</state>
-				<state id="MicroStepProcessed">
-					<transition target="../MicroStepPrepared" cond="self.fsa_selectedTransition != None">
-						<script>
-							<![CDATA[
-								print('From FSA/MicroStepProcessed to MicroStepPrepared... ')
-							]]>
-						</script>
-					</transition>
-					<transition target="../CheckTermination" cond="self.fsa_selectedTransition == None">
-						<script>
-							<![CDATA[
-								print('From FSA/MicroStepProcessed to FSA/CheckTermination and advancing time... ')
-								self.fsa_logicalTime = self.fsa_logicalTime + self.fsa_timestep
-								self.fsa_elapsed = self.fsa_elapsed + self.fsa_timestep
-								print(self.fsa_logicalTime)
-								print(self.fsa_elapsed)
-							]]>
-						</script>
-					</transition>
-				</state>
-				<state id="Started">
-					<transition target="../../ParentStarted">
-						<script>
-							<![CDATA[
-								print('From FSA/Started to ParentStarted... ')
-								self.weaved_delta = min(self.fsa_timestep, self.cbd_delta)
-								self.fsa_logicalTime = 0.0
-								self.fsa_elapsed = 0
-								self.fsa_timestep = self.weaved_delta
-								self.fsa_currentState = self.weaved_model.initialState
-							]]>
-						</script>
-					</transition>
-				</state>
-				<state id="CheckTermination" initial="MacroStepProcessed">
-					<state id="MacroStepProcessed">
-						<transition target="../../MacroStepPrepared" cond="not self.fsa_currentState.final">
-							<script>
-								<![CDATA[
-									print('From FSA/CheckTermination/MacroStepProcessed to FSA/MacroStepPrepared and reading events... ')
-									self.fsa_currentEvent = self.fsa_getInputEventAt(self.fsa_logicalTime)
-									self.fsa_selectedTransition = self.weaved_model.getTransitionFrom(self.fsa_currentState, self.fsa_currentEvent, self.fsa_elapsed)
-									print(self.fsa_currentEvent)
-									print(self.fsa_selectedTransition)
-								]]>
-							</script>
-						</transition>
-						<transition target="../../Terminated" cond="self.fsa_currentState.final">
-							<script>
-								<![CDATA[
-									print('From FSA/CheckTermination/MacroStepProcessed to Terminated... ')
-								]]>
-							</script>
-						</transition>
-					</state>
-				</state>
-				<state id="Terminated">
-					<transition target="../../HybridTerminated">
-						<script>
-							<![CDATA[
-								print('From FSA/Terminated to HybridTerminated... ')
-							]]>
-						</script>
-					</transition>
-				</state>
-			</state>
-			<state id="NoStateEventDetected">
-				<transition target="../ChildProcessed">
-					<script>
-						<![CDATA[
-							print('From NoStateEventDetected to ChildProcessed... ')
-						]]>
-					</script>
-				</transition>
-			</state>
-			<state id="StateEventDetected">
-				<transition target="../ChildProcessed">
-					<script>
-						<![CDATA[
-							print('From StateEventDetected to ChildProcessed... ')
-							if self.fsa_selectedTransition == None:
-								self.fsa_selectedTransition = self.weaved_triggered_when_transition
-						]]>
-					</script>
-				</transition>
-			</state>
-			<state id="ParentPaused">
-				<transition target="../ChildDetected" cond="isinstance(self.fsa_currentState, CBDState)">
-					<script>
-						<![CDATA[
-							print('From ParentPaused to ChildDetected... ')
-							self.cbd_model = self.fsa_currentState.cbd
-						]]>
-					</script>
-				</transition>
-				<transition target="../ChildProcessed" cond="not isinstance(self.fsa_currentState, CBDState)">
-					<script>
-						<![CDATA[
-							print('From ParentPaused to ChildProcessed without any child to process... ')
-						]]>
-					</script>
-				</transition>
-			</state>
-			<state id="ParentStarted">
-				<transition target="../FSA/Initialized">
-					<script>
-						<![CDATA[
-							print('From ParentStarted to FSA/Initialized... ')
-							self.weaved_global_state = dict()
-							self.weaved_previous_global_state = dict()
-							self.woven_child_initialized = False
-						]]>
-					</script>
-				</transition>
-			</state>
-			<state id="CBD" initial="Started">
-				<state id="Initialized">
-					<transition target="../MacroStepProcessed">
-						<script>
-							<![CDATA[
-								print('From CBD/Initialized to MacroStepProcessed... ')
-							]]>
-						</script>
-					</transition>
-				</state>
-				<state id="Started">
-					<transition target="../Initialized">
-						<script>
-							<![CDATA[
-								print('From CBD/Started to Initialized... ')
-								print('Performing initialization...')
-								self.cbd_iteration = 0
-								self.cbd_clock = 0
-								self.cbd_controller = CBDController(self.cbd_model, self.cbd_delta)
-								self.cbd_controller.initSimulation()
-								print('Performing initialization... DONE')
-							]]>
-						</script>
-					</transition>
-				</state>
-				<state id="MicroStepProcessed">
-					<transition target="../MicroStepPrepared" cond="self.cbd_hasNextStrongComponent()">
-						<script>
-							<![CDATA[
-								print('From CBD/MicroStepProcessed to MicroStepPrepared')
-							]]>
-						</script>
-					</transition>
-					<transition target="../MacroStepProcessed" cond="not self.cbd_hasNextStrongComponent() and False">
-						<script>
-							<![CDATA[
-								print('From CBD/MicroStepProcessed to MacroStepProcessed and advancing time... ')
-								self.cbd_clock = self.cbd_clock + self.cbd_delta
-								self.cbd_iteration = self.cbd_iteration + 1
-								self.cbd_controller.advanceTimeStep()
-								print('CBD clock: ' + str(self.cbd_clock))
-								print('CBD iteration: ' + str(self.cbd_iteration))
-							]]>
-						</script>
-					</transition>
-					<transition target="../../ChildPaused" cond="not self.cbd_hasNextStrongComponent()">
-						<script>
-							<![CDATA[
-								print('From CBD/MicroStepProcessed to ChildPaused and detecting triggered transitions... ')
-								self.updateGlobalState()
-								self.weaved_lib.dumpGlobalState(self.weaved_model, self.weaved_global_state, self.fsa_logicalTime, self.fsa_currentState)
-								self.weaved_triggered_when_transition = self.getTriggeredWhenTransition()
-							]]>
-						</script>
-					</transition>
-				</state>
-				<state id="MacroStepPrepared">
-					<transition target="../MicroStepProcessed">
-						<script>
-							<![CDATA[
-								print('From CBD/MacroStepPrepared to MicroStepProcessed... ')
-							]]>
-						</script>
-					</transition>
-				</state>
-				<state id="MacroStepProcessed">
-					<transition target="../Terminated" cond="self.cbd_maxIterationsReached()">
-						<script>
-							<![CDATA[
-								print('From CBD/MacroStepProcessed to Terminated... ')
-							]]>
-						</script>
-					</transition>
-					<transition target="../MacroStepPrepared" cond="not self.cbd_maxIterationsReached()">
-						<script>
-							<![CDATA[
-								print('From CBD/MacroStepProcessed to MacroStepPrepared... ')
-								self.cbd_currentCompIdx = 0
-								self.cbd_depGraph = self.cbd_controller.createDepGraph(self.cbd_iteration)
-								self.cbd_strongComponentList = self.cbd_controller.createStrongComponents(self.cbd_depGraph, self.cbd_iteration)
-							]]>
-						</script>
-					</transition>
-				</state>
-				<state id="Terminated">
-					<transition target="../../HybridTerminated">
-						<script>
-							<![CDATA[
-								print('From CBD/Terminated to HybridTerminated... ')
-							]]>
-						</script>
-					</transition>
-				</state>
-				<state id="MicroStepPrepared">
-					<transition target="../MicroStepProcessed">
-						<script>
-							<![CDATA[
-								print('From CBD/MicroStepPrepared to MicroStepProcessed...')
-								self.cbd_computeBlock()
-								self.cbd_currentCompIdx = self.cbd_currentCompIdx + 1
-							]]>
-						</script>
-					</transition>
-				</state>
-			</state>
-		</scxml>
-	</class>
-</diagram>

+ 532 - 0
fsa_cbd_composition/fsa_cbd_simulator/woven_fsa_cbd_simulator_hierarchical.xml

@@ -0,0 +1,532 @@
+<?xml version="1.0" ?>
+<diagram name="Weaved_CBD_FSA_Simulator_Manual" author="Sadaf Mustafiz and Bruno Barroca and Claudio Gomes">
+	<description>
+		Automatically woven CBD and FSA simulators with the FSA being the dominant.
+	</description>
+	<top>
+		<![CDATA[
+			from sccd.runtime.libs.ui import *
+			from sccd.runtime.libs.utils import *
+			import copy
+			from CBD_Controller import CBDController
+			import Options
+			from fsa_cbd_weaved_classes import CBDState
+			from weaved_cbd_fsa_lib import FSACBDLib
+		]]>
+	</top>
+	<class name="Weaved_CBD_FSA_Simulator" default="True">
+		<attribute name="weaved_global_state"/>
+		<attribute name="fsa_elapsed"/>
+		<attribute name="cbd_options"/>
+		<attribute name="weaved_lib"/>
+		<attribute name="woven_child_initialized"/>
+		<attribute name="cbd_clock"/>
+		<attribute name="fsa_currentEvent"/>
+		<attribute name="weaved_delta"/>
+		<attribute name="weaved_model"/>
+		<attribute name="cbd_controller"/>
+		<attribute name="fsa_timestep"/>
+		<attribute name="cbd_currentCompIdx"/>
+		<attribute name="fsa_eventList"/>
+		<attribute name="cbd_depGraph"/>
+		<attribute name="fsa_selectedTransition"/>
+		<attribute name="cbd_strongComponentList"/>
+		<attribute name="weaved_previous_global_state"/>
+		<attribute name="cbd_delta"/>
+		<attribute name="weaved_triggered_when_transition"/>
+		<attribute name="cbd_iteration"/>
+		<attribute name="fsa_logicalTime"/>
+		<attribute name="fsa_currentState"/>
+		<method name="Weaved_CBD_FSA_Simulator">
+			<parameter name="cbd_options"/>
+			<parameter name="amodel"/>
+			<parameter name="fsa_events"/>
+			<body>
+			<![CDATA[
+				self.weaved_lib = FSACBDLib()
+				self.cbd_options = cbd_options
+				self.cbd_delta = self.cbd_options.getDeltaT()
+				self.weaved_model = amodel
+				self.fsa_eventList = fsa_events
+				self.fsa_timestep = 1.0
+			]]>
+			</body>
+		</method>
+		<method name="fsa_processEvent">
+			<parameter name="event"/>
+			<body>
+			<![CDATA[
+				if (event != None):
+					self.fsa_eventList.popEvent(event)
+					event.processed = True
+			]]>
+			</body>
+		</method>
+		<method name="updateCBDState">
+			<body>
+			<![CDATA[
+				self.weaved_lib.updateCBDState(self.weaved_global_state, self.fsa_currentState.cbd)
+			]]>
+			</body>
+		</method>
+		<method name="cbd_maxIterationsReached">
+			<body>
+			<![CDATA[
+				return self.cbd_iteration >= self.cbd_options.getMaxIterations()
+			]]>
+			</body>
+		</method>
+		<method name="fsa_getInputEventAt">
+			<parameter name="time"/>
+			<body>
+			<![CDATA[
+				return self.fsa_eventList.getInputAt(time)
+			]]>
+			</body>
+		</method>
+		<method name="cbd_computeBlock">
+			<body>
+			<![CDATA[
+				if self.cbd_currentComponentIsCycle():
+					self.cbd_controller.computeNextAlgebraicLoop(self.cbd_strongComponentList[self.cbd_currentCompIdx], self.cbd_iteration)
+				else:
+					self.cbd_controller.computeNextBlock(self.cbd_strongComponentList[self.cbd_currentCompIdx], self.cbd_iteration)
+			]]>
+			</body>
+		</method>
+		<method name="updateGlobalState">
+			<body>
+			<![CDATA[
+				self.weaved_previous_global_state = copy.deepcopy(self.weaved_global_state)
+				self.weaved_lib.updateGlobalState(self.weaved_global_state, self.fsa_currentState.cbd, self.cbd_clock)
+			]]>
+			</body>
+		</method>
+		<method name="cbd_currentComponentIsCycle">
+			<body>
+			<![CDATA[
+				return self.cbd_controller.componentIsCycle(self.cbd_strongComponentList[self.cbd_currentCompIdx], self.cbd_depGraph)
+			]]>
+			</body>
+		</method>
+		<method name="cbd_hasNextStrongComponent">
+			<body>
+			<![CDATA[
+				return (self.cbd_currentCompIdx) < len(self.cbd_strongComponentList)
+			]]>
+			</body>
+		</method>
+		<method name="getTriggeredWhenTransition">
+			<body>
+			<![CDATA[
+				return self.weaved_lib.getTriggeredWhenTransition(self.weaved_model, self.fsa_currentState, self.weaved_global_state, self.weaved_previous_global_state)
+			]]>
+			</body>
+		</method>
+		<scxml initial="FSA" final="HybridTerminated">
+			<state id="FSA" initial="Started">
+				<state id="Started">
+					<transition target="../../ParentStarted">
+						<script>
+							<![CDATA[
+								print('From FSA/Started to ParentStarted... ')
+								self.weaved_delta = min(self.fsa_timestep, self.cbd_delta)
+								self.fsa_logicalTime = 0.0
+								self.fsa_elapsed = 0
+								self.fsa_timestep = self.weaved_delta
+								self.fsa_currentState = self.weaved_model.initialState
+							]]>
+						</script>
+					</transition>
+				</state>
+				<state id="Initialized">
+					<transition target="../CheckTermination">
+						<script>
+							<![CDATA[
+								print('From FSA/Initialized to FSA/CheckTermination... ')
+							]]>
+						</script>
+					</transition>
+				</state>
+				<state id="CheckTermination" initial="MacroStepProcessed">
+					<state id="MacroStepProcessed">
+						<transition target="../../DoSimulation" cond="not self.fsa_currentState.final">
+							<script>
+								<![CDATA[
+									print('From FSA/CheckTermination/MacroStepProcessed to FSA/DoSimulation and reading events... ')
+									self.fsa_currentEvent = self.fsa_getInputEventAt(self.fsa_logicalTime)
+									self.fsa_selectedTransition = self.weaved_model.getTransitionFrom(self.fsa_currentState, self.fsa_currentEvent, self.fsa_elapsed)
+									print('Current event:' + str(self.fsa_currentEvent))
+									print('Current transition:' + str(self.fsa_selectedTransition))
+									print('Child detected?:' + str(isinstance(self.fsa_currentState, CBDState)))
+								]]>
+							</script>
+						</transition>
+						<transition target="../../Terminated" cond="self.fsa_currentState.final">
+							<script>
+								<![CDATA[
+									print('From FSA/CheckTermination/MacroStepProcessed to Terminated... ')
+								]]>
+							</script>
+						</transition>
+					</state>
+				</state>
+				<state id="DoSimulation" initial="MacroStepPrepared">
+					<state id="MacroStepPrepared" initial="ParentPaused">
+						<state id="ParentPaused">
+							<transition target="../ChildDetected" cond="isinstance(self.fsa_currentState, CBDState)">
+								<script>
+									<![CDATA[
+										print('From FSA/ParentPaused to FSA/ChildDetected... ')
+										self.cbd_model = self.fsa_currentState.cbd
+									]]>
+								</script>
+							</transition>
+							<transition target="../ChildNotDetected" cond="not isinstance(self.fsa_currentState, CBDState)">
+								<script>
+									<![CDATA[
+										print('From ParentPaused to ChildNotDetected without any child to process... ')
+									]]>
+								</script>
+							</transition>
+						</state>
+						<state id="ChildNotDetected">
+							<transition target="../ChildProcessed">
+								<script>
+									<![CDATA[
+										print('From ChildNotDetected to ChildProcessed... ')
+									]]>
+								</script>
+							</transition>
+						</state>
+						<state id="ChildDetected">
+							<transition target="../ChildInitialized" cond="self.woven_child_initialized">
+								<script>
+									<![CDATA[
+										print('From ChildDetected to ChildInitialized... ')
+									]]>
+								</script>
+							</transition>
+							<transition target="../ChildNotInitialized" cond="not self.woven_child_initialized">
+								<script>
+									<![CDATA[
+										print('From ChildDetected to ChildNotInitialized... ')
+									]]>
+								</script>
+							</transition>
+						</state>
+						<state id="ChildInitialized">
+							<transition target="../ChildProcessed">
+								<script>
+									<![CDATA[
+										print('From ChildInitialized to ChildProcessed... ')
+									]]>
+								</script>
+							</transition>
+						</state>
+						<state id="ChildNotInitialized">
+							<transition target="../CBD/Started">
+								<script>
+									<![CDATA[
+										print('From ChildNotInitialized to CBD/Started... ')
+										self.cbd_delta = self.weaved_delta
+										self.updateCBDState()
+										self.woven_child_initialized = True
+									]]>
+								</script>
+							</transition>
+						</state>
+						<state id="CBD" initial="Started">
+							<state id="Started">
+								<transition target="../Initialized">
+									<script>
+										<![CDATA[
+											print('From CBD/Started to Initialized... ')
+											print('Performing initialization...')
+											self.cbd_iteration = 0
+											self.cbd_clock = 0
+											self.cbd_controller = CBDController(self.cbd_model, self.cbd_delta)
+											self.cbd_controller.initSimulation()
+											print('Performing initialization... DONE')
+										]]>
+									</script>
+								</transition>
+							</state>
+							<state id="Initialized">
+								<transition target="../../ChildInitialized">
+									<script>
+										<![CDATA[
+											print('From CBD/Initialized to ChildInitialized... ')
+										]]>
+									</script>
+								</transition>
+							</state>
+						</state>
+						<state id="ChildProcessed">
+							<transition target="../../MicroStepProcessed">
+								<script>
+									<![CDATA[
+										print('From MacroStepPrepared/ChildProcessed to MicroStepProcessed... ')
+									]]>
+								</script>
+							</transition>
+						</state>
+					</state>
+					<state id="MicroStepProcessed" initial="ParentPaused">
+						<state id="ParentPaused">
+							<transition target="../ChildDetected" cond="isinstance(self.fsa_currentState, CBDState)">
+								<script>
+									<![CDATA[
+										print('From FSA/ParentPaused to FSA/ChildDetected... ')
+										self.cbd_model = self.fsa_currentState.cbd
+									]]>
+								</script>
+							</transition>
+							<transition target="../ChildNotDetected" cond="not isinstance(self.fsa_currentState, CBDState)">
+								<script>
+									<![CDATA[
+										print('From ParentPaused to ChildNotDetected without any child to process... ')
+									]]>
+								</script>
+							</transition>
+						</state>
+						<state id="ChildNotDetected">
+							<transition target="../ChildProcessed">
+								<script>
+									<![CDATA[
+										print('From ChildNotDetected to ChildProcessed... ')
+									]]>
+								</script>
+							</transition>
+						</state>
+						<state id="ChildDetected">
+							<transition target="../ChildInitialized" cond="self.woven_child_initialized">
+								<script>
+									<![CDATA[
+										print('From ChildDetected to ChildInitialized... ')
+									]]>
+								</script>
+							</transition>
+						</state>
+						<state id="ChildInitialized">
+							<transition target="../CBD/CheckTermination">
+								<script>
+									<![CDATA[
+										print('From ChildInitialized to ChildProcessed... ')
+									]]>
+								</script>
+							</transition>
+						</state>
+						<state id="CBD" initial="CheckTermination">
+							<state id="CheckTermination" initial="MacroStepProcessed">
+								<state id="MacroStepProcessed">
+									<transition target="../../Terminated" cond="self.cbd_maxIterationsReached()">
+										<script>
+											<![CDATA[
+												print('From CBD/MacroStepProcessed to Terminated... ')
+											]]>
+										</script>
+									</transition>
+									<transition target="../../DoSimulation" cond="not self.cbd_maxIterationsReached()">
+										<script>
+											<![CDATA[
+												print('From CBD/MacroStepProcessed to MacroStepPrepared... ')
+												self.cbd_currentCompIdx = 0
+												self.cbd_depGraph = self.cbd_controller.createDepGraph(self.cbd_iteration)
+												self.cbd_strongComponentList = self.cbd_controller.createStrongComponents(self.cbd_depGraph, self.cbd_iteration)
+											]]>
+										</script>
+									</transition>
+								</state>
+							</state>
+							<state id="DoSimulation" initial="MacroStepPrepared">
+								<state id="MacroStepPrepared">
+									<transition target="../MicroStepProcessed">
+										<script>
+											<![CDATA[
+												print('From CBD/MacroStepPrepared to MicroStepProcessed... ')
+											]]>
+										</script>
+									</transition>
+								</state>
+								<state id="MicroStepProcessed">
+									<transition target="../MicroStepPrepared" cond="self.cbd_hasNextStrongComponent()">
+										<script>
+											<![CDATA[
+												print('From CBD/MicroStepProcessed to MicroStepPrepared')
+											]]>
+										</script>
+									</transition>
+									<transition target="../../../ChildPaused" cond="not self.cbd_hasNextStrongComponent()">
+										<script>
+											<![CDATA[
+												print('From CBD/MicroStepProcessed to ChildPaused and detecting triggered transitions... ')
+												self.updateGlobalState()
+												self.weaved_lib.dumpGlobalState(self.weaved_model, self.weaved_global_state, self.fsa_logicalTime, self.fsa_currentState)
+												self.weaved_triggered_when_transition = self.getTriggeredWhenTransition()
+												self.cbd_clock = self.cbd_clock + self.cbd_delta
+												self.cbd_iteration = self.cbd_iteration + 1
+												self.cbd_controller.advanceTimeStep()
+												print('CBD clock: ' + str(self.cbd_clock))
+												print('CBD iteration: ' + str(self.cbd_iteration))
+											]]>
+										</script>
+									</transition>
+								</state>
+								<state id="MicroStepPrepared">
+									<transition target="../MicroStepProcessed">
+										<script>
+											<![CDATA[
+												print('From CBD/MicroStepPrepared to MicroStepProcessed...')
+												self.cbd_computeBlock()
+												self.cbd_currentCompIdx = self.cbd_currentCompIdx + 1
+											]]>
+										</script>
+									</transition>
+								</state>
+							</state>
+							<state id="Terminated">
+								<transition target="../../../../../HybridTerminated">
+									<script>
+										<![CDATA[
+											print('From CBD/Terminated to HybridTerminated... ')
+										]]>
+									</script>
+								</transition>
+							</state>
+						</state>
+						<state id="ChildPaused">
+							<transition target="../NoStateEventDetected" cond="self.weaved_triggered_when_transition == None">
+								<script>
+									<![CDATA[
+										print('From ChildPaused to NoStateEventDetected... ')
+									]]>
+								</script>
+							</transition>
+							<transition target="../StateEventDetected" cond="self.weaved_triggered_when_transition != None">
+								<script>
+									<![CDATA[
+										print('From ChildPaused to StateEventDetected... ')
+									]]>
+								</script>
+							</transition>
+						</state>
+						<state id="NoStateEventDetected">
+							<transition target="../ChildProcessed">
+								<script>
+									<![CDATA[
+										print('From NoStateEventDetected to ChildProcessed... ')
+									]]>
+								</script>
+							</transition>
+						</state>
+						<state id="StateEventDetected">
+							<transition target="../ChildProcessed">
+								<script>
+									<![CDATA[
+										print('From StateEventDetected to ChildProcessed... ')
+										if self.fsa_selectedTransition == None:
+											self.fsa_selectedTransition = self.weaved_triggered_when_transition
+									]]>
+								</script>
+							</transition>
+						</state>
+						<state id="ChildProcessed">
+							<transition target="../../MicroStepPrepared" cond="self.fsa_selectedTransition != None">
+								<script>
+									<![CDATA[
+										print('From FSA/MicroStepProcessed/ChildProcessed to MicroStepPrepared... ')
+									]]>
+								</script>
+							</transition>
+							<transition target="../../../CheckTermination" cond="self.fsa_selectedTransition == None">
+								<script>
+									<![CDATA[
+										print('From FSA/MicroStepProcessed/ChildProcessed to FSA/CheckTermination and advancing time... ')
+										self.fsa_logicalTime = self.fsa_logicalTime + self.fsa_timestep
+										self.fsa_elapsed = self.fsa_elapsed + self.fsa_timestep
+										print(self.fsa_logicalTime)
+										print(self.fsa_elapsed)
+									]]>
+								</script>
+							</transition>
+						</state>
+					</state>
+					<state id="MicroStepPrepared">
+						<transition target="../ParentMicroStepProcessed">
+							<script>
+								<![CDATA[
+									print('From FSA/MicroStepPrepared to ParentMicroStepProcessed and attempting to take transition... ')
+									print('Transition to be taken: ' + str(self.fsa_selectedTransition))
+									self.fsa_currentState = self.fsa_selectedTransition.target
+									self.fsa_elapsed = 0
+									self.fsa_processEvent(self.fsa_currentEvent)
+									self.weaved_lib.dumpDiscreteEvent(self.weaved_model, self.fsa_logicalTime, self.fsa_currentState, self.fsa_selectedTransition)
+									self.weaved_lib.dumpGlobalState(self.weaved_model, self.weaved_global_state, self.fsa_logicalTime, self.fsa_currentState)
+									print('New state: ' + str(self.fsa_currentState))
+									print('Reading events:')
+									self.fsa_currentEvent = self.fsa_getInputEventAt(self.fsa_logicalTime)
+									self.fsa_selectedTransition = self.weaved_model.getTransitionFrom(self.fsa_currentState, self.fsa_currentEvent, self.fsa_elapsed)
+									print(self.fsa_currentEvent)
+									print(self.fsa_selectedTransition)
+								]]>
+							</script>
+						</transition>
+						<transition target="../MicroStepProcessed" cond="False">
+							<script>
+								<![CDATA[
+									print('From FSA/MicroStepPrepared to MicroStepProcessed and attempting to take transition... ')
+									print('Transition to be taken: ' + str(self.fsa_selectedTransition))
+									self.fsa_currentState = self.fsa_selectedTransition.target
+									self.fsa_elapsed = 0
+									self.fsa_processEvent(self.fsa_currentEvent)
+									self.weaved_lib.dumpDiscreteEvent(self.weaved_model, self.fsa_logicalTime, self.fsa_currentState, self.fsa_selectedTransition)
+									self.weaved_lib.dumpGlobalState(self.weaved_model, self.weaved_global_state, self.fsa_logicalTime, self.fsa_currentState)
+									print('New state: ' + str(self.fsa_currentState))
+									print('Reading events:')
+									self.fsa_currentEvent = self.fsa_getInputEventAt(self.fsa_logicalTime)
+									self.fsa_selectedTransition = self.weaved_model.getTransitionFrom(self.fsa_currentState, self.fsa_currentEvent, self.fsa_elapsed)
+									print(self.fsa_currentEvent)
+									print(self.fsa_selectedTransition)
+								]]>
+							</script>
+						</transition>
+					</state>
+					<state id="ParentMicroStepProcessed">
+						<transition target="../MacroStepPrepared">
+							<script>
+								<![CDATA[
+									print('From ParentMicroStepProcessed to ParentPaused and resetting the child... ')
+									self.woven_child_initialized = False
+								]]>
+							</script>
+						</transition>
+					</state>
+				</state>
+				<state id="Terminated">
+					<transition target="../../HybridTerminated">
+						<script>
+							<![CDATA[
+								print('From FSA/Terminated to HybridTerminated... ')
+							]]>
+						</script>
+					</transition>
+				</state>
+			</state>
+			<state id="ParentStarted">
+				<transition target="../FSA/Initialized">
+					<script>
+						<![CDATA[
+							print('From ParentStarted to FSA/Initialized... ')
+							self.weaved_global_state = dict()
+							self.weaved_previous_global_state = dict()
+							self.woven_child_initialized = False
+						]]>
+					</script>
+				</transition>
+			</state>
+			<state id="HybridTerminated">
+			</state>
+		</scxml>
+	</class>
+</diagram>