From 3f46ee724f0b8a7ed369c131a34b1fa8dfada3d7 Mon Sep 17 00:00:00 2001 From: Michiel Cottaar <michiel.cottaar@ndcn.ox.ac.uk> Date: Mon, 12 Feb 2024 17:45:45 +0000 Subject: [PATCH] Add Wait block as a sub-type of BaseBuildingBlock --- .../all_building_blocks.jl | 2 ++ src/all_building_blocks/wait_blocks.jl | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 src/all_building_blocks/wait_blocks.jl diff --git a/src/all_building_blocks/all_building_blocks.jl b/src/all_building_blocks/all_building_blocks.jl index 8a4d260..a337c92 100644 --- a/src/all_building_blocks/all_building_blocks.jl +++ b/src/all_building_blocks/all_building_blocks.jl @@ -3,10 +3,12 @@ include("base_building_blocks.jl") include("building_blocks.jl") include("trapezoids.jl") include("spoilt_slice_selects.jl") +include("wait_blocks.jl") import .BaseBuildingBlocks: waveform, waveform_sequence, events, BaseBuildingBlock import .BuildingBlocks: BuildingBlock import .Trapezoids: Trapezoid, SliceSelect, LineReadout import .SpoiltSliceSelects: SpoiltSliceSelect +import ..WaitBlocks: Wait end \ No newline at end of file diff --git a/src/all_building_blocks/wait_blocks.jl b/src/all_building_blocks/wait_blocks.jl new file mode 100644 index 0000000..3558cf8 --- /dev/null +++ b/src/all_building_blocks/wait_blocks.jl @@ -0,0 +1,22 @@ +module WaitBlocks +import JuMP: @constraint +import ...BuildSequences: get_global_model +import ...Variables: get_free_variable, VariableType, duration +import ...Components: NoGradient +import ..BaseBuildingBlocks: BaseBuildingBlock + +struct Wait <: BuildingBlock + duration :: VariableType + function Wait(var) + res = new(get_free_variable(var)) + if !(res.duration isa Number) + @constraint get_global_model() res.duration >= 0 + end + end +end + +duration(wb::Wait) = wb.duration +Base.keys(::Wait) = (:empty) +Base.getindex(wb::Wait) = NoGradient{1}(wb.duration) + +end \ No newline at end of file -- GitLab