StateEventLocation.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #!/usr/bin/python3
  2. # This file was automatically generated from drawio2cbd with the command:
  3. # /home/red/git/DrawioConvert/__main__.py StateEventLocation.xml -av -F CBD -e Experiment -t 100 -E delta=0.1
  4. from CBD.Core import *
  5. from CBD.lib.std import *
  6. from CBD.lib.plotting import SignalPlotBlock
  7. DELTA_T = 0.1
  8. class Experiment(CBD):
  9. def __init__(self, block_name, axis1=(None), axis2=(None)):
  10. super().__init__(block_name, input_ports=[], output_ports=[])
  11. # Create the Blocks
  12. self.addBlock(StateEventLocationBlock("sel"))
  13. self.addBlock(SignalPlotBlock("eventplot", axes=(axis1), type=("plot"), xlim=(SignalPlotBlock.full_domain), ylim=(SignalPlotBlock.full_domain)))
  14. self.addBlock(SignalPlotBlock("valueplot", axes=(axis2), type=("plot"), xlim=(SignalPlotBlock.full_domain), ylim=(SignalPlotBlock.full_domain)))
  15. self.addBlock(AdderBlock("sum"))
  16. self.addBlock(ConstantBlock("threshold", value=(-50)))
  17. self.addBlock(TimeBlock("time"))
  18. # Create the Connections
  19. self.addConnection("sel", "eventplot", output_port_name='OUT1', input_port_name='IN1')
  20. self.addConnection("sum", "valueplot", output_port_name='OUT1', input_port_name='IN1')
  21. self.addConnection("sum", "sel", output_port_name='OUT1', input_port_name='IN1')
  22. self.addConnection("threshold", "sum", output_port_name='OUT1', input_port_name='IN1')
  23. self.addConnection("time", "sum", output_port_name='OUT1', input_port_name='IN2')
  24. class StateEventLocationBlock(CBD):
  25. """
  26. Outputs '1' if the IN1 signal passes through zero at the current point in time (or in between the previous and the current point in time), otherwise it outputs '0'.
  27. """
  28. def __init__(self, block_name):
  29. super().__init__(block_name, input_ports=['IN1'], output_ports=['OUT1'])
  30. # Create the Blocks
  31. self.addBlock(ConstantBlock("zero", value=(0)))
  32. self.addBlock(LessThanBlock("lt"))
  33. self.addBlock(LessThanOrEqualsBlock("lte"))
  34. self.addBlock(DelayBlock("delay"))
  35. self.addBlock(AndBlock("and", numberOfInputs=(2)))
  36. # Create the Connections
  37. self.addConnection("IN1", "lte", input_port_name='IN2')
  38. self.addConnection("IN1", "delay", input_port_name='IN1')
  39. self.addConnection("IN1", "delay", input_port_name='IC')
  40. self.addConnection("zero", "lt", output_port_name='OUT1', input_port_name='IN2')
  41. self.addConnection("zero", "lte", output_port_name='OUT1', input_port_name='IN1')
  42. self.addConnection("delay", "lt", output_port_name='OUT1', input_port_name='IN1')
  43. self.addConnection("lt", "and", output_port_name='OUT1', input_port_name='IN1')
  44. self.addConnection("lte", "and", output_port_name='OUT1', input_port_name='IN2')
  45. self.addConnection("and", "OUT1", output_port_name='OUT1')