Просмотр исходного кода

hybrid hierarchical simulator working

Cláudio Gomes 9 лет назад
Родитель
Сommit
aa118ed2bf

Разница между файлами не показана из-за своего большого размера
+ 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">
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
 <listEntry value="1"/>
 <listEntry value="1"/>
 </listAttribute>
 </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_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_OTHER_WORKING_DIRECTORY" value="${workspace_loc:fsa_cbd_simulator}"/>
 <stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value=""/>
 <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
 @ECHO OFF
 setlocal
 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
 endlocal
 pause
 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)") + 
   xlab("Time (s)") + 
   scale_y_discrete("Event", labels = waiver(), limits=c("when(x +-)", "kick")) +
   scale_y_discrete("Event", labels = waiver(), limits=c("when(x +-)", "kick")) +
   theme(axis.title.y=element_text(vjust=-4))
   theme(axis.title.y=element_text(vjust=-4))
+pe
 
 
 ps <- ggplot(data=total , aes(x=fsatime, y=fsastate, group=1)) +
 ps <- ggplot(data=total , aes(x=fsatime, y=fsastate, group=1)) +
   geom_line() +
   geom_line() +
@@ -19,18 +20,21 @@ ps <- ggplot(data=total , aes(x=fsatime, y=fsastate, group=1)) +
   xlab("Time (s)") + 
   xlab("Time (s)") + 
   scale_y_discrete("State", labels = waiver(), limits=c("Initial", "FreeFall", "Collision", "Kicked")) +
   scale_y_discrete("State", labels = waiver(), limits=c("Initial", "FreeFall", "Collision", "Kicked")) +
   theme(axis.title.y=element_text(vjust=-2))
   theme(axis.title.y=element_text(vjust=-2))
+ps
 
 
 px <- ggplot(data=total , aes(x=fsatime, y=x, group=1)) +
 px <- ggplot(data=total , aes(x=fsatime, y=x, group=1)) +
         geom_line() +
         geom_line() +
         ylab("Height (m)") + 
         ylab("Height (m)") + 
         xlab("Time (s)") +
         xlab("Time (s)") +
         theme(axis.title.y=element_text(vjust=-6))
         theme(axis.title.y=element_text(vjust=-6))
+px
 
 
 pv <- ggplot(data=total , aes(x=fsatime, y=v, group=1)) +
 pv <- ggplot(data=total , aes(x=fsatime, y=v, group=1)) +
         geom_line() +
         geom_line() +
         ylab("Velocity (m/s)") + 
         ylab("Velocity (m/s)") + 
         xlab("Time (s)") +
         xlab("Time (s)") +
         theme(axis.title.y=element_text(vjust=-6))
         theme(axis.title.y=element_text(vjust=-6))
+pv
 
 
 pt <- ggplot(data=total , aes(x=fsatime, y=current_cbdtime, group=1)) +
 pt <- ggplot(data=total , aes(x=fsatime, y=current_cbdtime, group=1)) +
         geom_point() +
         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_y_continuous(limits=c(0, 10)) +
         scale_x_continuous(limits=c(0, 10)) +
         scale_x_continuous(limits=c(0, 10)) +
         theme(axis.title.y=element_text(vjust=-6))
         theme(axis.title.y=element_text(vjust=-6))
+pt
 
 
 multiplot <- plot_grid(pe, ps, px , pv, pt, nrow = 3, ncol = 2, align = "v")
 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")
 px_pv_plot <- plot_grid(px, pv, nrow=1, ncol=2, align="h")

Разница между файлами не показана из-за своего большого размера
+ 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)
 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 author: Sadaf Mustafiz and Bruno Barroca and Claudio Gomes
 Model name:   Weaved_CBD_FSA_Simulator_Manual
 Model name:   Weaved_CBD_FSA_Simulator_Manual
@@ -129,202 +129,170 @@ class Weaved_CBD_FSA_Simulator(RuntimeClassBase):
         # state <root>
         # state <root>
         self.states[""] = State(0, self)
         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
         # 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["/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["/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/Started"])
+        self.states["/FSA"].addChild(self.states["/FSA/Initialized"])
         self.states["/FSA"].addChild(self.states["/FSA/CheckTermination"])
         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"].addChild(self.states["/FSA/Terminated"])
         self.states["/FSA/CheckTermination"].addChild(self.states["/FSA/CheckTermination/MacroStepProcessed"])
         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[""].fixTree()
         self.states[""].default_state = self.states["/FSA"]
         self.states[""].default_state = self.states["/FSA"]
         self.states["/FSA"].default_state = self.states["/FSA/Started"]
         self.states["/FSA"].default_state = self.states["/FSA/Started"]
         self.states["/FSA/CheckTermination"].default_state = self.states["/FSA/CheckTermination/MacroStepProcessed"]
         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
         # transition /FSA/Started
         _FSA_Started_0 = Transition(self, self.states["/FSA/Started"], [self.states["/ParentStarted"]])
         _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)
         _FSA_Started_0.setTrigger(None)
         self.states["/FSA/Started"].addTransition(_FSA_Started_0)
         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
         # 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.setAction(self._FSA_CheckTermination_MacroStepProcessed_0_exec)
         _FSA_CheckTermination_MacroStepProcessed_0.setTrigger(None)
         _FSA_CheckTermination_MacroStepProcessed_0.setTrigger(None)
         _FSA_CheckTermination_MacroStepProcessed_0.setGuard(self._FSA_CheckTermination_MacroStepProcessed_0_guard)
         _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)
         _FSA_CheckTermination_MacroStepProcessed_1.setGuard(self._FSA_CheckTermination_MacroStepProcessed_1_guard)
         self.states["/FSA/CheckTermination/MacroStepProcessed"].addTransition(_FSA_CheckTermination_MacroStepProcessed_1)
         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
         # transition /FSA/Terminated
         _FSA_Terminated_0 = Transition(self, self.states["/FSA/Terminated"], [self.states["/HybridTerminated"]])
         _FSA_Terminated_0 = Transition(self, self.states["/FSA/Terminated"], [self.states["/HybridTerminated"]])
         _FSA_Terminated_0.setAction(self._FSA_Terminated_0_exec)
         _FSA_Terminated_0.setAction(self._FSA_Terminated_0_exec)
         _FSA_Terminated_0.setTrigger(None)
         _FSA_Terminated_0.setTrigger(None)
         self.states["/FSA/Terminated"].addTransition(_FSA_Terminated_0)
         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
         # transition /ParentStarted
         _ParentStarted_0 = Transition(self, self.states["/ParentStarted"], [self.states["/FSA/Initialized"]])
         _ParentStarted_0 = Transition(self, self.states["/ParentStarted"], [self.states["/FSA/Initialized"]])
         _ParentStarted_0.setAction(self._ParentStarted_0_exec)
         _ParentStarted_0.setAction(self._ParentStarted_0_exec)
         _ParentStarted_0.setTrigger(None)
         _ParentStarted_0.setTrigger(None)
         self.states["/ParentStarted"].addTransition(_ParentStarted_0)
         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):
     def _FSA_Started_0_exec(self, parameters):
         print('From FSA/Started to ParentStarted... ')
         print('From FSA/Started to ParentStarted... ')
@@ -529,12 +519,16 @@ class Weaved_CBD_FSA_Simulator(RuntimeClassBase):
         self.fsa_timestep = self.weaved_delta
         self.fsa_timestep = self.weaved_delta
         self.fsa_currentState = self.weaved_model.initialState
         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):
     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_currentEvent = self.fsa_getInputEventAt(self.fsa_logicalTime)
         self.fsa_selectedTransition = self.weaved_model.getTransitionFrom(self.fsa_currentState, self.fsa_currentEvent, self.fsa_elapsed)
         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):
     def _FSA_CheckTermination_MacroStepProcessed_0_guard(self, parameters):
         return not self.fsa_currentState.final
         return not self.fsa_currentState.final
@@ -545,40 +539,44 @@ class Weaved_CBD_FSA_Simulator(RuntimeClassBase):
     def _FSA_CheckTermination_MacroStepProcessed_1_guard(self, parameters):
     def _FSA_CheckTermination_MacroStepProcessed_1_guard(self, parameters):
         return self.fsa_currentState.final
         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
         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)
         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)
         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('From CBD/Started to Initialized... ')
         print('Performing initialization...')
         print('Performing initialization...')
         self.cbd_iteration = 0
         self.cbd_iteration = 0
@@ -587,58 +585,147 @@ class Weaved_CBD_FSA_Simulator(RuntimeClassBase):
         self.cbd_controller.initSimulation()
         self.cbd_controller.initSimulation()
         print('Performing initialization... DONE')
         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... ')
         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()
         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... ')
         print('From CBD/MacroStepProcessed to MacroStepPrepared... ')
         self.cbd_currentCompIdx = 0
         self.cbd_currentCompIdx = 0
         self.cbd_depGraph = self.cbd_controller.createDepGraph(self.cbd_iteration)
         self.cbd_depGraph = self.cbd_controller.createDepGraph(self.cbd_iteration)
         self.cbd_strongComponentList = self.cbd_controller.createStrongComponents(self.cbd_depGraph, 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()
         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...')
         print('From CBD/MicroStepPrepared to MicroStepProcessed...')
         self.cbd_computeBlock()
         self.cbd_computeBlock()
         self.cbd_currentCompIdx = self.cbd_currentCompIdx + 1
         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):
     def initializeStatechart(self):
         # enter default state
         # enter default state
         self.default_targets = self.states["/FSA"].getEffectiveTargetStates()
         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>