diff --git a/src/all_sequences/sequences.jl b/src/all_sequences/sequences.jl index 49610d2fd82ccfef427ed28e24278a43f9dea79b..423950e49c313367003e050dff5eb4fbfb5829e6 100644 --- a/src/all_sequences/sequences.jl +++ b/src/all_sequences/sequences.jl @@ -1,8 +1,10 @@ module Sequences import StaticArrays: SVector -import ..BaseSequences: ContainerBlock, BaseSequence, nrepeat +import JuMP: @constraint import ...Variables: get_free_variable, TR, VariableType import ...BuildingBlocks: WaitBlock +import ...BuildSequences: get_global_model +import ..BaseSequences: ContainerBlock, BaseSequence, nrepeat """ Sequence(blocks; TR=:min, nrepeat=0) @@ -16,7 +18,7 @@ Defines an MRI sequence from a vector of building blocks. """ struct Sequence{N} <: BaseSequence{N} blocks :: SVector{N, <:ContainerBlock} - TR :: Float64 + TR :: VariableType nrepeat :: Int end @@ -24,7 +26,10 @@ function Sequence(blocks::AbstractVector; TR=:min, nrepeat=0) if TR == :min TR = sum(duration, blocks; init=0.) end - return sequence(SVector{length(blocks)}(to_block.(blocks)), get_free_variable(TR), nrepeat) + res = sequence(SVector{length(blocks)}(to_block.(blocks)), get_free_variable(TR), nrepeat) + if !(res.TR isa Number) || !(duration(res) isa Number) + @constraint get_global_model() res.TR >= duration(res) + end end Sequence(blocks...; kwargs...) = Sequence([blocks...]; kwargs...)