This is happening with the failure to forward calculate the current position. I am manually setting omega to be a value. The calculation value is updated but not the calculation limits.
tardis.omega.set(0)
n [60]: tardis.calc['omega'].value
Out[60]: 0
In [61]: tardis.calc['omega'].limits
Out[61]: (3.0, 3.0)
I am manually moving omega, but in the in it will not be continuously moved. Shorter, more integrated method to freeze a calculation would be great.
rr001m = tardis.calc.sample.add_reflection(0, 0, 1, position=tardis.calc.Position(theta=157.5, omega=8, chi=0.0, phi=0.0, delta=-.3, gamma=12.8))
r_3dmag_0k0_side= tardis.calc.sample.add_reflection(0,-2/3, 0, position=tardis.calc.Position(theta=-94.547, omega=0, chi=0, phi=0.0, delta=126.55, gamma=3.900))
tardis.calc.sample.compute_UB(rr001m, r_3dmag_0k0_side)
In [41]: wh_pos(tardis)
+--------------+---------------------------------+--------------------------------+--------------------------------+
| Positioner | Value | Low Limit | High Limit |
+--------------+---------------------------------+--------------------------------+--------------------------------+
| tardis | [ 0. -0.662072 -0.17091 ] | TardisPseudoPos(h=0, k=0, l=0) | TardisPseudoPos(h=0, k=0, l=0) |
| tardis_chi | 0.00000 | 0 | 0 |
| tardis_delta | 126.55000 | -3.20000 | 181.00000 |
| tardis_gamma | 3.89970 | -2.50000 | 180.50000 |
| tardis_h | 0.00000 | 0 | 0 |
| tardis_k | -0.66207 | 0 | 0 |
| tardis_l | -0.17091 | 0 | 0 |
| tardis_omega | 0 | 0 | 0 |
| tardis_phi | 0.00000 | 0 | 0 |
| tardis_theta | -94.54700 | -170.00000 | 158.00000 |
+--------------+---------------------------------+--------------------------------+--------------------------------+
In [42]: tardis.position
Out[42]: TardisPseudoPos(h=3.019043153215566e-07, k=-0.6620717318271894, l=-0.17091012908220807)
In [43]: tardis.forward(0,-0.66207,-0.1709)
---------------------------------------------------------------------------
GError Traceback (most recent call last)
/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/hkl/engine.py in pseudo_positions(self, values)
213 geometry_list = self._engine.pseudo_axis_values_set(values,
--> 214 self._units)
215 except GLib.GError as ex:
GError: no remaining solutions
During handling of the above exception, another exception occurred:
ValueError Traceback (most recent call last)
/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/hkl/calc.py in forward_iter(self, start, end, max_iters, threshold, decision_fcn)
490 try:
--> 491 self.engine.pseudo_positions = end
492 return self.engine.solutions
/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/hkl/engine.py in pseudo_positions(self, values)
215 except GLib.GError as ex:
--> 216 raise ValueError('Calculation failed (%s)' % ex)
217
ValueError: Calculation failed (no remaining solutions)
During handling of the above exception, another exception occurred:
UnreachableError Traceback (most recent call last)
/home/xf23id1/Beamline/ScienceComm/2017_04_MuR/user_defs.py in <module>()
----> 1 tardis.forward(0,-0.66207,-0.1709)
/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/ophyd/pseudopos.py in wrapped(self, *args, **kwargs)
198 pos, new_kwargs = self.to_real_tuple(*args, **kwargs)
199
--> 200 return method(self, pos, **new_kwargs)
201
202 return wrapped
/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/hkl/diffract.py in forward(self, pseudo)
231 def forward(self, pseudo):
232 solutions = self._calc.forward_iter(start=self.position, end=pseudo,
--> 233 max_iters=100)
234 logger.debug('pseudo to real: {}'.format(solutions))
235 return self._decision_fcn(pseudo, solutions)
/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/hkl/calc.py in wrapped(self, *args, **kwargs)
42 initial_pos = self.physical_positions
43 try:
---> 44 return func(self, *args, **kwargs)
45 finally:
46 self.physical_positions = initial_pos
/opt/conda_envs/collection-17Q1.0/lib/python3.5/site-packages/hkl/calc.py in forward_iter(self, start, end, max_iters, threshold, decision_fcn)
496 ''.format(iters, max_iters, valid_pseudo,
497 valid_real),
--> 498 pseudo=valid_pseudo, physical=valid_real)
499
500 @_keep_physical_position
UnreachableError: Unable to solve. iterations=100/100
Last valid position: None
None
HklSample(name='main', lattice=LatticeTuple(a=5.42, b=5.42, c=12.72, alpha=90.0, beta=90.0, gamma=90.0), ux=Parameter(name='None (internally: ux)', limits=(-180.0, 180.0), value=-3.761652562247211, fit=True, inverted=False, units='Degree'), uy=Parameter(name='None (internally: uy)', limits=(-180.0, 180.0), value=13.391338088391683, fit=True, inverted=False, units='Degree'), uz=Parameter(name='None (internally: uz)', limits=(-180.0, 180.0), value=-21.305927243686735, fit=True, inverted=False, units='Degree'), U=array([[ 0.90632282, 0.35346852, 0.23160084],
[-0.37672075, 0.92412563, 0.0638223 ],
[-0.1914691 , -0.14509245, 0.97071508]]), UB=array([[ 1.05066314, 0.40976166, 0.11440181],
[-0.43671703, 1.07130122, 0.03152573],
[-0.22196233, -0.16819977, 0.4794955 ]]), reflections=[(0.0, 0.0, 1.0), (0.0, 0.0, 1.0), (1.0, 0.0, 0.0), (0.0, -2.0, 0.0), (0.0, -2.0, 0.0), (0.0, -0.6666666666666666, 0.0)])