@@ -137,7 +137,7 @@ def range(self, range):
137137
138138 @property
139139 def strengths (self ):
140- return Strengths (self ._jmadModel . getStrengthsAndVars () )
140+ return Strengths (self ._jmadModel )
141141
142142 @property
143143 def elements (self ):
@@ -397,20 +397,24 @@ def __repr__(self):
397397
398398
399399class Strengths (MutableMapping ):
400- def __init__ (self , jmadStrengthVarSet ):
401- self ._jmadStrengthVarSet = jmadStrengthVarSet
400+ def __init__ (self , jmadModel ):
401+ self ._jmadStrengthVarSet = jmadModel .getStrengthsAndVars ()
402+ self ._jmadModel = jmadModel
402403
403- def _jmadStrength (self , k ):
404+ def __getitem__ (self , k ):
404405 jmadStrength = self ._jmadStrengthVarSet .getStrength (k )
405406 if jmadStrength is None :
406407 raise KeyError ('Invalid Strength Name: ' + k )
407- return jmadStrength
408-
409- def __getitem__ (self , k ):
410- return self ._jmadStrength (k ).getValue ()
408+ return jmadStrength .getValue ()
411409
412410 def __setitem__ (self , k , v ):
413- return self ._jmadStrength (k ).setValue (float (v ))
411+ jmadStrength = self ._jmadStrengthVarSet .getStrength (k )
412+ if jmadStrength is None :
413+ logging .info ("Creating new MAD-X strength " + k )
414+ SimpleStrength = cern .accsoft .steering .jmad .domain .knob .strength .SimpleStrength
415+ jmadStrength = SimpleStrength (k , 0.0 , None )
416+ jmadStrength .addListener (self ._jmadModel .strengthListener )
417+ return jmadStrength .setValue (float (v ))
414418
415419 def __delitem__ (self , k ):
416420 raise NotImplementedError ('Deletion of Strengths is not supported' )
0 commit comments