From ea01e987d1ad1061db22c557f13eefd4b7599104 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 8 May 2026 18:08:36 -0400 Subject: [PATCH 1/2] keep track instead of calculating later --- .../java/cnuphys/magfield/MagneticFields.java | 116 +++++++++++------- 1 file changed, 71 insertions(+), 45 deletions(-) diff --git a/common-tools/cnuphys/magfield/src/main/java/cnuphys/magfield/MagneticFields.java b/common-tools/cnuphys/magfield/src/main/java/cnuphys/magfield/MagneticFields.java index 070dc817b2..e71733d355 100644 --- a/common-tools/cnuphys/magfield/src/main/java/cnuphys/magfield/MagneticFields.java +++ b/common-tools/cnuphys/magfield/src/main/java/cnuphys/magfield/MagneticFields.java @@ -72,6 +72,12 @@ public class MagneticFields { // which field is active private IMagField _activeField; + // whether the active field is a torus: + private boolean _hasActiveTorus = false; + + // whether the active field is a solenoid: + private boolean _hasActiveSolenoid = false; + // types of fields public enum FieldType { TORUS, SOLENOID, COMPOSITE, COMPOSITEROTATED, ZEROFIELD @@ -181,7 +187,7 @@ protected void openNewTorus(String path) throws FileNotFoundException { _torus = readTorus(path); if (activeFieldWasTorus) { - _activeField = _torus; + setActiveField(_torus); } if (_torus != null) { @@ -266,7 +272,7 @@ protected void openSolenoid(File file, boolean isTransverse) throws FileNotFound _solenoid = readSolenoid(file.getAbsolutePath(), isTransverse); if (activeFieldWasSolenoid) { - _activeField = _solenoid; + setActiveField(_solenoid); } if (_solenoid != null) { @@ -479,6 +485,57 @@ private String sysPropOrEnvVar(String key) { return s; } + private boolean getActiveTorus() { + + if (_activeField != null) { + if (_activeField instanceof Torus) { + return true; + } else if (_activeField instanceof TorusProbe) { + return true; + } else if (_activeField instanceof CompositeProbe) { + return ((CompositeProbe) _activeField).hasTorus(); + } else if (_activeField instanceof CompositeField) { + return ((CompositeField) _activeField).hasTorus(); + } + } + + return false; + } + + private boolean getActiveSolenoid() { + if (_activeField != null) { + if (_activeField instanceof Solenoid) { + return true; + } else if (_activeField instanceof SolenoidProbe) { + return true; + } else if (_activeField instanceof CompositeProbe) { + return ((CompositeProbe) _activeField).hasSolenoid(); + } else if (_activeField instanceof CompositeField) { + return ((CompositeField) _activeField).hasSolenoid(); + } + } + + return false; + } + + /** + * Check whether we have an active torus field + * + * @return true if we have a torus + */ + public boolean hasActiveTorus() { + return _hasActiveTorus; + } + + /** + * Check whether we have an active solenoid field + * + * @return true if we have a solenoid + */ + public boolean hasActiveSolenoid() { + return _hasActiveSolenoid; + } + /** * Sets the active field * @@ -486,6 +543,8 @@ private String sysPropOrEnvVar(String key) { */ public void setActiveField(IMagField field) { _activeField = field; + _hasActiveTorus = getActiveTorus(); + _hasActiveSolenoid = getActiveSolenoid(); } /** @@ -500,18 +559,28 @@ public void setActiveField(FieldType ftype) { switch (ftype) { case TORUS: _activeField = _torus; + _hasActiveTorus = true; + _hasActiveSolenoid = false; break; case SOLENOID: _activeField = _solenoid; + _hasActiveTorus = false; + _hasActiveSolenoid = true; break; case COMPOSITE: _activeField = _compositeField; + _hasActiveTorus = _compositeField.hasTorus(); + _hasActiveSolenoid = _compositeField.hasSolenoid(); break; case COMPOSITEROTATED: _activeField = _rotatedCompositeField; + _hasActiveTorus = _rotatedCompositeField.hasTorus(); + _hasActiveSolenoid = _rotatedCompositeField.hasSolenoid(); break; case ZEROFIELD: _activeField = null; + _hasActiveTorus = false; + _hasActiveSolenoid = false; break; } @@ -1379,49 +1448,6 @@ public void removeMapOverlap() { notifyListeners(); } - /** - * Check whether we have an active torus field - * - * @return true if we have a torus - */ - public boolean hasActiveTorus() { - - if (_activeField != null) { - if (_activeField instanceof Torus) { - return true; - } else if (_activeField instanceof TorusProbe) { - return true; - } else if (_activeField instanceof CompositeProbe) { - return ((CompositeProbe) _activeField).hasTorus(); - } else if (_activeField instanceof CompositeField) { - return ((CompositeField) _activeField).hasTorus(); - } - } - - return false; - } - - /** - * Check whether we have an active solenoid field - * - * @return true if we have a solenoid - */ - public boolean hasActiveSolenoid() { - if (_activeField != null) { - if (_activeField instanceof Solenoid) { - return true; - } else if (_activeField instanceof SolenoidProbe) { - return true; - } else if (_activeField instanceof CompositeProbe) { - return ((CompositeProbe) _activeField).hasSolenoid(); - } else if (_activeField instanceof CompositeField) { - return ((CompositeField) _activeField).hasSolenoid(); - } - } - - return false; - } - /** * Get the torus field * From e7ae210ae852adc80cf5058682f3411449747fb4 Mon Sep 17 00:00:00 2001 From: Nathan Baltzell Date: Fri, 8 May 2026 21:12:02 -0400 Subject: [PATCH 2/2] complete initializations --- .../java/cnuphys/magfield/MagneticFields.java | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/common-tools/cnuphys/magfield/src/main/java/cnuphys/magfield/MagneticFields.java b/common-tools/cnuphys/magfield/src/main/java/cnuphys/magfield/MagneticFields.java index e71733d355..f368a46e44 100644 --- a/common-tools/cnuphys/magfield/src/main/java/cnuphys/magfield/MagneticFields.java +++ b/common-tools/cnuphys/magfield/src/main/java/cnuphys/magfield/MagneticFields.java @@ -543,8 +543,14 @@ public boolean hasActiveSolenoid() { */ public void setActiveField(IMagField field) { _activeField = field; - _hasActiveTorus = getActiveTorus(); - _hasActiveSolenoid = getActiveSolenoid(); + _hasActiveTorus = getActiveTorus(); + _hasActiveSolenoid = getActiveSolenoid(); + } + + private void resetActiveField() { + _activeField = null; + _hasActiveTorus = false; + _hasActiveSolenoid = false; } /** @@ -1088,21 +1094,19 @@ private void makeComposites() { } // set the default active field - _activeField = null; + resetActiveField(); if ((_torus != null) && (_solenoid != null)) { - _activeField = _compositeField; + setActiveField(_compositeField); } else if ((_torus != null) && (_solenoid != null)) { - _activeField = _compositeField; + setActiveField(_compositeField); } - else if (_torus != null) { - _activeField = _torus; + setActiveField(_torus); } else if (_solenoid != null) { - _activeField = _solenoid; + setActiveField(_solenoid); } - } // final initialziation @@ -1203,19 +1207,19 @@ private void handleMenuSelection(ActionEvent ae) { Object source = ae.getSource(); if (source == _torusItem) { - _activeField = _torus; + setActiveField(_torus); } else if (source == _solenoidItem) { - _activeField = _solenoid; + setActiveField(_solenoid); } else if (source == _bothItem) { - _activeField = _compositeField; + setActiveField(_compositeField); } else if ((_bothRotatedItem != null) && (source == _bothRotatedItem)) { - _activeField = _rotatedCompositeField; + setActiveField(_rotatedCompositeField); } else if (source == _zeroItem) { - _activeField = null; + resetActiveField(); } else if (source == _interpolateItem) { MagneticField.setInterpolate(true);