From 8abd6c068214d820ae0bf9869b8bac4a773ed19f Mon Sep 17 00:00:00 2001
From: Michiel Cottaar <michiel.cottaar@ndcn.ox.ac.uk>
Date: Thu, 15 Feb 2024 19:03:09 +0000
Subject: [PATCH] Add default fixed implementation for `AbstractBlock`.

---
 src/variables.jl | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/variables.jl b/src/variables.jl
index 4b97c03..d983f8f 100644
--- a/src/variables.jl
+++ b/src/variables.jl
@@ -14,13 +14,21 @@ In addition this defines:
 module Variables
 import JuMP: @constraint, @variable, Model, @objective, objective_function, AbstractJuMPScalar
 import ..Scanners: gradient_strength, slew_rate, Scanner
-import ..BuildSequences: global_model, global_scanner
+import ..BuildSequences: global_model, global_scanner, fixed
 
 """
 Parent type of all components, building block, and sequences that form an MRI sequence.
 """
 abstract type AbstractBlock end
 
+function fixed(ab::AbstractBlock)
+    params = []
+    for prop_name in propertynames(ab)
+        push!(params, fixed(getproperty(ab, prop_name)))
+    end
+    return typeof(ab)(params...)
+end
+
 all_variables_symbols = [
     :block => [
         :duration => "duration of the building block in ms.",
-- 
GitLab