From f2927940883ba675e8691460adebbc8293b80c22 Mon Sep 17 00:00:00 2001 From: Christof Kraus <christof.kraus@psi.ch> Date: Fri, 17 Jul 2020 18:02:01 +0200 Subject: [PATCH] change sign such that the absolute value of the amplitude is lowered if the bending angle is too big and increased if it's too small --- src/Classic/AbsBeamline/Bend2D.cpp | 37 +++++++++++------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/src/Classic/AbsBeamline/Bend2D.cpp b/src/Classic/AbsBeamline/Bend2D.cpp index ceb2de9a6..87a0f7e5f 100644 --- a/src/Classic/AbsBeamline/Bend2D.cpp +++ b/src/Classic/AbsBeamline/Bend2D.cpp @@ -692,31 +692,22 @@ void Bend2D::findBendStrength() { if (error < tolerance) return; - double fieldStep = estimateFieldAdjustmentStep(actualBendAngle); + double fieldStep = std::copysign(1.0, fieldAmplitude_m) * std::abs(estimateFieldAdjustmentStep(actualBendAngle)); double amplitude1 = fieldAmplitude_m; + double amplitude2 = amplitude1; double bendAngle1 = actualBendAngle; - - double amplitude2 = fieldAmplitude_m + fieldStep; - fieldAmplitude_m = amplitude2; - double bendAngle2 = calculateBendAngle(); - - if (std::abs(bendAngle1) > std::abs(angle_m)) { - while (std::abs(bendAngle2) > std::abs(angle_m)) { - amplitude1 = amplitude2; - bendAngle1 = bendAngle2; - - amplitude2 += fieldStep; - fieldAmplitude_m = amplitude2; - bendAngle2 = calculateBendAngle(); - } - } else { - while (std::abs(bendAngle2) < std::abs(angle_m)) { - amplitude1 = amplitude2; - bendAngle1 = bendAngle2; - - amplitude2 += fieldStep; - fieldAmplitude_m = amplitude2; - bendAngle2 = calculateBendAngle(); + double bendAngle2 = bendAngle1; + + int stepSign = std::abs(bendAngle1) > std::abs(angle_m) ? -1: 1; + while (true) { + amplitude1 = amplitude2; + bendAngle1 = bendAngle2; + + amplitude2 += stepSign * fieldStep; + fieldAmplitude_m = amplitude2; + bendAngle2 = calculateBendAngle(); + if (stepSign * (std::abs(bendAngle2) - std::abs(angle_m)) > 0) { + break; } } -- GitLab