Skip to content

Commit bc911b0

Browse files
baltzellheddle
andauthored
feat: keep track of field types during initialization instead of checking later (#1252)
* keep track instead of calculating later * complete initializations --------- Co-authored-by: heddle <David.Heddle@cnu.edu>
1 parent 2dd19d7 commit bc911b0

1 file changed

Lines changed: 87 additions & 57 deletions

File tree

‎common-tools/cnuphys/magfield/src/main/java/cnuphys/magfield/MagneticFields.java‎

Lines changed: 87 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)