diff --git a/technique/sans/instrument.py b/technique/sans/instrument.py index 9a746aa..2d0c4d7 100755 --- a/technique/sans/instrument.py +++ b/technique/sans/instrument.py @@ -87,6 +87,8 @@ def method_iterator(self): callable(getattr(self, method)): yield method + + def set_default_dae(self, mode=None, trans=False): """Set the default DAE mode for SANS or TRANS measurements. @@ -449,7 +451,7 @@ def detector_on(self, powered=None, delay=True): else: self._detector_turn_off(delay=delay) return self._detector_is_on() - + def check_move_pos(self, pos): """Check whether the position is valid and return True or False @@ -459,8 +461,9 @@ def check_move_pos(self, pos): The sample changer position """ - if pos.upper() not in [pos_name.upper() for pos_name in self._poslist]: - warning(f"Error in script, position {pos} does not exist") + stripped_pos = pos.strip() + if stripped_pos.upper() not in [pos_name.upper() for pos_name in self._poslist]: + warning(f"Error in script, position {stripped_pos} does not exist") return False return True @@ -673,6 +676,18 @@ def _setup(self, title=None, position=None, thickness=None, trans=False, if period: gen.change_period(period) + + + def _validate_sample_position(self, position): + if position is None: + raise ValueError("Sample position cannot be None") + + stripped_pos = position.strip() + if stripped_pos not in self._poslist: + raise ValueError(f"Invalid sample position: '{stripped_pos}'. " + f"Available positions are: {', '.join(self._poslist)}") + return stripped_pos + def _set_sample_position(self, position, dls_sample_changer=False): if isinstance(position, str): if dls_sample_changer and self.check_move_pos_dls(position): @@ -680,7 +695,7 @@ def _set_sample_position(self, position, dls_sample_changer=False): self.changer_pos_dls = position elif self.check_move_pos(position): info(f"Moving to sample changer position {position}") - self.changer_pos = position + self.changer_pos = self._validate_sample_position(position) else: raise RuntimeError( f"Position {position} does not exist") @@ -710,7 +725,8 @@ def _measure(self, title=None, position=None, thickness=None, trans=False, dae=None, aperture="", period=None, time=None, _custom=True, **kwargs): - self._setup(title=title, position=position, thickness=thickness, trans=trans, + valid_pos = self._validate_sample_position(position) + self._setup(title=title, position=valid_pos, thickness=thickness, trans=trans, dae=dae, aperture=aperture, period=period, _custom=_custom, **kwargs) @@ -718,7 +734,9 @@ def _measure(self, title=None, position=None, thickness=None, trans=False, if time or self.sanitised_timings(kwargs): self._do_measure(title=title, time=time, **kwargs) - def do_sans(self, title=None, pos=None, thickness=None, dae=None, + + def do_sans(self, title="", pos=None, thickness=None, dae=None, + aperture="", period=None, time=None, dls_sample_changer=False, **kwargs): """A wrapper around ``measure`` which ensures that the instrument is in sans mode before running the measurement if a title is given. @@ -749,7 +767,9 @@ def do_sans(self, title=None, pos=None, thickness=None, dae=None, dae=dae, aperture=aperture, period=period, time=time, _custom=False, dls_sample_changer=dls_sample_changer, **kwargs) - def do_trans(self, title=None, pos=None, thickness=None, dae=None, + + def do_trans(self, title="", pos=None, thickness=None, dae=None, + aperture="", period=None, time=None, dls_sample_changer=False, **kwargs): """A wrapper around ``measure`` which ensures that the instrument is in transition mode before running the measurement if a title is given. It ensures that the