Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 27 additions & 7 deletions technique/sans/instrument.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down Expand Up @@ -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

Expand All @@ -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

Expand Down Expand Up @@ -673,14 +676,26 @@ 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):
info(f"Moving to dls sample changer position {position}")
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")
Expand Down Expand Up @@ -710,15 +725,18 @@ 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)

# If a time frame given start the experiment
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.
Expand Down Expand Up @@ -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
Expand Down