diff --git a/src/components/instant_gradients.jl b/src/components/instant_gradients.jl index 08e9cc99451c2dc4e601f9b1bf8fd5db7f91e3ca..cc2801c6e5f77b4860bb9e06f1c5ca84f879111a 100644 --- a/src/components/instant_gradients.jl +++ b/src/components/instant_gradients.jl @@ -1,6 +1,6 @@ module InstantGradients import StaticArrays: SVector, SMatrix -import ...Variables: VariableType, duration, qvec, bmat_gradient, get_free_variable, set_simple_constraints!, qval, effective_time +import ...Variables: VariableType, duration, qvec, bmat_gradient, get_free_variable, set_simple_constraints!, qval, effective_time, make_generic import ..AbstractTypes: EventComponent, GradientWaveform """ @@ -78,5 +78,6 @@ duration(::InstantGradient) = 0. effective_time(::InstantGradient) = 0. bmat_gradient(::InstantGradient, qstart=nothing) = zero(SMatrix{3, 3, Float64, 3}) +make_generic(ig::InstantGradient) = ig end \ No newline at end of file diff --git a/src/components/pulses/constant_pulses.jl b/src/components/pulses/constant_pulses.jl index 7cb42e612d7ccabffdf5d0e583ff051cc4d00aa1..f240dac9098df5d9d39fa562fdc93c53f8bd06c3 100644 --- a/src/components/pulses/constant_pulses.jl +++ b/src/components/pulses/constant_pulses.jl @@ -2,7 +2,7 @@ module ConstantPulses import JuMP: @constraint import ...AbstractTypes: RFPulseComponent import ....BuildSequences: global_model -import ....Variables: duration, amplitude, effective_time, flip_angle, phase, inverse_bandwidth, VariableType, set_simple_constraints!, frequency +import ....Variables: duration, amplitude, effective_time, flip_angle, phase, inverse_bandwidth, VariableType, set_simple_constraints!, frequency, make_generic import ..GenericPulses: GenericPulse """ diff --git a/src/components/pulses/generic_pulses.jl b/src/components/pulses/generic_pulses.jl index 08ac34d4c56ad39afa9c3435ea6b33cbaa08c1f7..a21af015a07b87d3f7dcc233c8730324702ab88d 100644 --- a/src/components/pulses/generic_pulses.jl +++ b/src/components/pulses/generic_pulses.jl @@ -1,7 +1,7 @@ module GenericPulses import ...AbstractTypes: RFPulseComponent -import ....Variables: duration, amplitude, effective_time, flip_angle +import ....Variables: duration, amplitude, effective_time, flip_angle, make_generic """ diff --git a/src/components/pulses/instant_pulses.jl b/src/components/pulses/instant_pulses.jl index 826c6db9ac186695eaaf2dcf3ad11083594616a4..d473299e8764eb1f70c6008c30fd8ea114ceaa74 100644 --- a/src/components/pulses/instant_pulses.jl +++ b/src/components/pulses/instant_pulses.jl @@ -2,7 +2,7 @@ module InstantPulses import JuMP: @constraint import ...AbstractTypes: RFPulseComponent import ....BuildSequences: global_model -import ....Variables: duration, amplitude, effective_time, flip_angle, phase, inverse_bandwidth, VariableType +import ....Variables: duration, amplitude, effective_time, flip_angle, phase, inverse_bandwidth, VariableType, make_generic """ InstantPulse(; flip_angle=nothing, phase=nothing, group=nothing) diff --git a/src/components/pulses/sinc_pulses.jl b/src/components/pulses/sinc_pulses.jl index 3511399e84ebc0750d412b6f9033ee363c52a21a..8e19aa333bd44f053dcc603feea44e9156835d99 100644 --- a/src/components/pulses/sinc_pulses.jl +++ b/src/components/pulses/sinc_pulses.jl @@ -2,7 +2,7 @@ module SincPulses import JuMP: @constraint import QuadGK: quadgk import ....BuildSequences: global_model -import ....Variables: duration, amplitude, effective_time, flip_angle, phase, inverse_bandwidth, VariableType, set_simple_constraints!, frequency +import ....Variables: duration, amplitude, effective_time, flip_angle, phase, inverse_bandwidth, VariableType, set_simple_constraints!, frequency, make_generic import ...AbstractTypes: RFPulseComponent import ..GenericPulses: GenericPulse diff --git a/src/components/readouts/ADCs.jl b/src/components/readouts/ADCs.jl index a5924065f80c86504d06c4f0bf384446f006c15d..20db48798dfc385df77330a550a7a11f1d81b89e 100644 --- a/src/components/readouts/ADCs.jl +++ b/src/components/readouts/ADCs.jl @@ -1,6 +1,6 @@ module ADCs import JuMP: @constraint, value -import ...Variables: variables, dwell_time, duration, effective_time, get_free_variable, VariableType, nsamples, resolution, oversample +import ...Variables: variables, dwell_time, duration, effective_time, get_free_variable, VariableType, nsamples, resolution, oversample, make_generic import ...BuildingBlocks: BuildingBlock, apply_simple_constraint!, set_simple_constraints!, fixed, make_generic import ...BuildSequences: global_model diff --git a/src/components/readouts/single_readouts.jl b/src/components/readouts/single_readouts.jl index 1ec879f0568e700e46415d6a53c6a0106e17aec6..ee97eed7a3ba2e8f90adc38343c0d484c7478835 100644 --- a/src/components/readouts/single_readouts.jl +++ b/src/components/readouts/single_readouts.jl @@ -1,6 +1,6 @@ module InstantReadouts import ...AbstractTypes: ReadoutComponent -import ...Variables: variables, duration, effective_time +import ...Variables: variables, duration, effective_time, make_generic import ..ADCs: ADC """ diff --git a/src/variables.jl b/src/variables.jl index ac091cbb7f8e86ca4043b0276000b2398fd0f39f..1101fd02bbea9f70a887db5854dd368937f31ff2 100644 --- a/src/variables.jl +++ b/src/variables.jl @@ -252,4 +252,17 @@ apply_simple_constraint!(variable, value::VariableType) = @constraint global_mod apply_simple_constraint!(variable::AbstractVector, value::AbstractVector) = [apply_simple_constraint!(v1, v2) for (v1, v2) in zip(variable, value)] apply_simple_constraint!(variable::Number, value::Number) = @assert variable ≈ value "Variable set to multiple incompatible values." + +""" + make_generic(sequence/building_block/component) + +Returns a generic version of the `BaseSequence`, `BaseBuildingBlock`, or `BaseComponent` + +- Sequences are all flattened and returned as a single `Sequence` containing only `BuildingBlock` objects. +- Any `BaseBuildingBlock` is converted into a `BuildingBlock`. +- Pulses are replaced with `GenericPulse` (except for instant pulses). +- Instant readouts are replaced with `ADC`. +""" +function make_generic end + end \ No newline at end of file