@@ -72,6 +72,12 @@ public class MagneticFields {
7272 // which field is active
7373 private IMagField _activeField ;
7474
75+ // whether the active field is a torus:
76+ private boolean _hasActiveTorus = false ;
77+
78+ // whether the active field is a solenoid:
79+ private boolean _hasActiveSolenoid = false ;
80+
7581 // types of fields
7682 public enum FieldType {
7783 TORUS , SOLENOID , COMPOSITE , COMPOSITEROTATED , ZEROFIELD
@@ -181,7 +187,7 @@ protected void openNewTorus(String path) throws FileNotFoundException {
181187 _torus = readTorus (path );
182188
183189 if (activeFieldWasTorus ) {
184- _activeField = _torus ;
190+ setActiveField ( _torus ) ;
185191 }
186192
187193 if (_torus != null ) {
@@ -266,7 +272,7 @@ protected void openSolenoid(File file, boolean isTransverse) throws FileNotFound
266272 _solenoid = readSolenoid (file .getAbsolutePath (), isTransverse );
267273
268274 if (activeFieldWasSolenoid ) {
269- _activeField = _solenoid ;
275+ setActiveField ( _solenoid ) ;
270276 }
271277
272278 if (_solenoid != null ) {
@@ -479,13 +485,72 @@ private String sysPropOrEnvVar(String key) {
479485 return s ;
480486 }
481487
488+ private boolean getActiveTorus () {
489+
490+ if (_activeField != null ) {
491+ if (_activeField instanceof Torus ) {
492+ return true ;
493+ } else if (_activeField instanceof TorusProbe ) {
494+ return true ;
495+ } else if (_activeField instanceof CompositeProbe ) {
496+ return ((CompositeProbe ) _activeField ).hasTorus ();
497+ } else if (_activeField instanceof CompositeField ) {
498+ return ((CompositeField ) _activeField ).hasTorus ();
499+ }
500+ }
501+
502+ return false ;
503+ }
504+
505+ private boolean getActiveSolenoid () {
506+ if (_activeField != null ) {
507+ if (_activeField instanceof Solenoid ) {
508+ return true ;
509+ } else if (_activeField instanceof SolenoidProbe ) {
510+ return true ;
511+ } else if (_activeField instanceof CompositeProbe ) {
512+ return ((CompositeProbe ) _activeField ).hasSolenoid ();
513+ } else if (_activeField instanceof CompositeField ) {
514+ return ((CompositeField ) _activeField ).hasSolenoid ();
515+ }
516+ }
517+
518+ return false ;
519+ }
520+
521+ /**
522+ * Check whether we have an active torus field
523+ *
524+ * @return <code>true</code> if we have a torus
525+ */
526+ public boolean hasActiveTorus () {
527+ return _hasActiveTorus ;
528+ }
529+
530+ /**
531+ * Check whether we have an active solenoid field
532+ *
533+ * @return <code>true</code> if we have a solenoid
534+ */
535+ public boolean hasActiveSolenoid () {
536+ return _hasActiveSolenoid ;
537+ }
538+
482539 /**
483540 * Sets the active field
484541 *
485542 * @param field the new active field
486543 */
487544 public void setActiveField (IMagField field ) {
488545 _activeField = field ;
546+ _hasActiveTorus = getActiveTorus ();
547+ _hasActiveSolenoid = getActiveSolenoid ();
548+ }
549+
550+ private void resetActiveField () {
551+ _activeField = null ;
552+ _hasActiveTorus = false ;
553+ _hasActiveSolenoid = false ;
489554 }
490555
491556 /**
@@ -500,18 +565,28 @@ public void setActiveField(FieldType ftype) {
500565 switch (ftype ) {
501566 case TORUS :
502567 _activeField = _torus ;
568+ _hasActiveTorus = true ;
569+ _hasActiveSolenoid = false ;
503570 break ;
504571 case SOLENOID :
505572 _activeField = _solenoid ;
573+ _hasActiveTorus = false ;
574+ _hasActiveSolenoid = true ;
506575 break ;
507576 case COMPOSITE :
508577 _activeField = _compositeField ;
578+ _hasActiveTorus = _compositeField .hasTorus ();
579+ _hasActiveSolenoid = _compositeField .hasSolenoid ();
509580 break ;
510581 case COMPOSITEROTATED :
511582 _activeField = _rotatedCompositeField ;
583+ _hasActiveTorus = _rotatedCompositeField .hasTorus ();
584+ _hasActiveSolenoid = _rotatedCompositeField .hasSolenoid ();
512585 break ;
513586 case ZEROFIELD :
514587 _activeField = null ;
588+ _hasActiveTorus = false ;
589+ _hasActiveSolenoid = false ;
515590 break ;
516591 }
517592
@@ -1019,21 +1094,19 @@ private void makeComposites() {
10191094 }
10201095
10211096 // set the default active field
1022- _activeField = null ;
1097+ resetActiveField () ;
10231098 if ((_torus != null ) && (_solenoid != null )) {
1024- _activeField = _compositeField ;
1099+ setActiveField ( _compositeField ) ;
10251100 }
10261101 else if ((_torus != null ) && (_solenoid != null )) {
1027- _activeField = _compositeField ;
1102+ setActiveField ( _compositeField ) ;
10281103 }
1029-
10301104 else if (_torus != null ) {
1031- _activeField = _torus ;
1105+ setActiveField ( _torus ) ;
10321106 }
10331107 else if (_solenoid != null ) {
1034- _activeField = _solenoid ;
1108+ setActiveField ( _solenoid ) ;
10351109 }
1036-
10371110 }
10381111
10391112 // final initialziation
@@ -1134,19 +1207,19 @@ private void handleMenuSelection(ActionEvent ae) {
11341207 Object source = ae .getSource ();
11351208
11361209 if (source == _torusItem ) {
1137- _activeField = _torus ;
1210+ setActiveField ( _torus ) ;
11381211 }
11391212 else if (source == _solenoidItem ) {
1140- _activeField = _solenoid ;
1213+ setActiveField ( _solenoid ) ;
11411214 }
11421215 else if (source == _bothItem ) {
1143- _activeField = _compositeField ;
1216+ setActiveField ( _compositeField ) ;
11441217 }
11451218 else if ((_bothRotatedItem != null ) && (source == _bothRotatedItem )) {
1146- _activeField = _rotatedCompositeField ;
1219+ setActiveField ( _rotatedCompositeField ) ;
11471220 }
11481221 else if (source == _zeroItem ) {
1149- _activeField = null ;
1222+ resetActiveField () ;
11501223 }
11511224 else if (source == _interpolateItem ) {
11521225 MagneticField .setInterpolate (true );
@@ -1379,49 +1452,6 @@ public void removeMapOverlap() {
13791452 notifyListeners ();
13801453 }
13811454
1382- /**
1383- * Check whether we have an active torus field
1384- *
1385- * @return <code>true</code> if we have a torus
1386- */
1387- public boolean hasActiveTorus () {
1388-
1389- if (_activeField != null ) {
1390- if (_activeField instanceof Torus ) {
1391- return true ;
1392- } else if (_activeField instanceof TorusProbe ) {
1393- return true ;
1394- } else if (_activeField instanceof CompositeProbe ) {
1395- return ((CompositeProbe ) _activeField ).hasTorus ();
1396- } else if (_activeField instanceof CompositeField ) {
1397- return ((CompositeField ) _activeField ).hasTorus ();
1398- }
1399- }
1400-
1401- return false ;
1402- }
1403-
1404- /**
1405- * Check whether we have an active solenoid field
1406- *
1407- * @return <code>true</code> if we have a solenoid
1408- */
1409- public boolean hasActiveSolenoid () {
1410- if (_activeField != null ) {
1411- if (_activeField instanceof Solenoid ) {
1412- return true ;
1413- } else if (_activeField instanceof SolenoidProbe ) {
1414- return true ;
1415- } else if (_activeField instanceof CompositeProbe ) {
1416- return ((CompositeProbe ) _activeField ).hasSolenoid ();
1417- } else if (_activeField instanceof CompositeField ) {
1418- return ((CompositeField ) _activeField ).hasSolenoid ();
1419- }
1420- }
1421-
1422- return false ;
1423- }
1424-
14251455 /**
14261456 * Get the torus field
14271457 *
0 commit comments