From b40d0842fe3fe91d22276867c7e5cda5e8f905f5 Mon Sep 17 00:00:00 2001
From: Michiel Cottaar <michiel.cottaar@ndcn.ox.ac.uk>
Date: Thu, 8 Feb 2024 13:29:57 +0000
Subject: [PATCH] Fix qval/qval_square variables

---
 src/building_blocks.jl | 12 +++++++++++-
 src/variables.jl       |  6 ------
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/building_blocks.jl b/src/building_blocks.jl
index 7434ec6..0e069e8 100644
--- a/src/building_blocks.jl
+++ b/src/building_blocks.jl
@@ -1,7 +1,7 @@
 module BuildingBlocks
 import JuMP: value, Model, @constraint, @objective, objective_function, AbstractJuMPScalar
 import Printf: @sprintf
-import ..Variables: Variables, variables, start_time, duration, end_time, gradient_strength, slew_rate, effective_time, VariableType, alternative_variables
+import ..Variables: Variables, variables, start_time, duration, end_time, gradient_strength, slew_rate, effective_time, VariableType, alternative_variables, qval_square
 import ..BuildSequences: global_model, global_scanner, fixed
 import ..Scanners: Scanner
 
@@ -122,6 +122,9 @@ end
 
 
 for variable_func in keys(variables)
+    if variable_func in [:qval_square, :qval]
+        continue
+    end
     @eval function Variables.$variable_func(bb::BuildingBlock)
         if Variables.$variable_func in keys(alternative_variables)
             alt_var, forward, backward, _ = alternative_variables[Variables.$variable_func]
@@ -144,6 +147,13 @@ for variable_func in keys(variables)
     end
 end
 
+function Variables.qval_square(bb::BuildingBlock, args...; kwargs...)
+    vec = Variables.qvec(bb, args...; kwargs...)
+    return vec[1]^2 + vec[2]^2 + vec[3]^2
+end
+
+Variables.qval(bb::BuildingBlock, args...; kwargs...) = sqrt(Variables.qval_square(bb, args...; kwargs...))
+
 
 struct BuildingBlockPrinter{T<:BuildingBlock}
     bb::T
diff --git a/src/variables.jl b/src/variables.jl
index b423a76..c1d971c 100644
--- a/src/variables.jl
+++ b/src/variables.jl
@@ -65,12 +65,6 @@ for (block_symbol, all_functions) in all_variables_symbols
 end
 
 
-# helper functions
-function qval_square(bb, args...; kwargs...)
-    vec = qvec(bb, args...; kwargs...)
-    return vec[1]^2 + vec[2]^2 + vec[3]^2
-end
-
 alternative_variables = Dict(
     qval => (qval_square, n->n^2, sqrt, false),
     slice_thickness => (inverse_slice_thickness, inv, inv, true),
-- 
GitLab