Skip to content

Commit c52d1bb

Browse files
committed
Added column valves state to Microscope classes.
1 parent 7427719 commit c52d1bb

7 files changed

Lines changed: 55 additions & 3 deletions

File tree

docs/changelog.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Version 2.0.1
66

77
* Added Talos as ProductFamily
88
* Added more graceful behavior for unsupported ProductFamily query and unknown future families.
9+
* Added column valves state to Microscope classes.
910

1011
Version 2.0.0
1112
^^^^^^^^^^^^^

scripts/test_microscope.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
print("Microscope.get_version():", microscope.get_version())
3535
print("Microscope.get_voltage():", microscope.get_voltage())
3636
print("Microscope.get_vacuum():", microscope.get_vacuum())
37+
print("Microscope.get_column_valves_open():", microscope.get_column_valves_open())
3738
print("Microscope.get_stage_holder():", microscope.get_stage_holder())
3839
print("Microscope.get_stage_status():", microscope.get_stage_status())
3940
print("Microscope.get_stage_limits():", microscope.get_stage_limits())

temscript/base_microscope.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,29 @@ def get_vacuum(self):
128128
"""
129129
raise NotImplementedError
130130

131+
@abstractmethod
132+
def get_column_valves_open(self):
133+
"""
134+
Returns state of the column valves.
135+
136+
:return: `True`, if column valves are open. `False`, otherwise.
137+
138+
.. versionadded: 2.1.0
139+
"""
140+
raise NotImplementedError
141+
142+
@abstractmethod
143+
def set_column_valves_open(self, state):
144+
"""
145+
Set state of the column valves. The column valves are opened, if `True` is passes as *state*
146+
147+
:param state: `True`, if column valves should be opened. `False`, if they should be closed.
148+
:type state: bool
149+
150+
.. versionadded: 2.0.1
151+
"""
152+
raise NotImplementedError
153+
131154
@abstractmethod
132155
def get_stage_holder(self):
133156
"""Return holder currently in stage (see :class:`StageHolderType`)"""

temscript/microscope.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,17 @@ def get_vacuum(self):
6767
gauges[name] = g.Pressure
6868
return {
6969
"status": VacuumStatus(self._tem_vacuum.Status).name,
70-
"column_valves_open": self._tem_vacuum.ColumnValvesOpen,
70+
"column_valves_open": self.get_column_valves_open(),
7171
"pvp_running": self._tem_vacuum.PVPRunning,
7272
"gauges(Pa)": gauges,
7373
}
7474

75+
def get_column_valves_open(self):
76+
return self._tem_vacuum.ColumnValvesOpen
77+
78+
def set_column_valves_open(self, state):
79+
self._tem_vacuum.ColumnValvesOpen = state
80+
7581
def get_stage_holder(self):
7682
return self._tem_stage.Holder.name
7783

temscript/null_microscope.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,12 @@ def get_vacuum(self):
141141
"gauges(Pa)": {},
142142
}
143143

144+
def get_column_valves_open(self):
145+
return self._column_valves
146+
147+
def set_column_valves_open(self, state):
148+
self._column_valves = bool(state)
149+
144150
def get_stage_holder(self):
145151
return StageHolderType.SINGLE_TILT.name
146152

temscript/remote_microscope.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,12 @@ def get_voltage(self):
142142
def get_vacuum(self):
143143
return self._request("GET", "/v1/vacuum")[1]
144144

145+
def get_column_valves_open(self):
146+
return self._request("GET", "/v1/column_valves_open")[1]
147+
148+
def set_column_valves_open(self, state):
149+
self._request_with_json_body("PUT", "/v1/column_valves_open", state)
150+
145151
def get_stage_holder(self):
146152
return self._request("GET", "/v1/stage_holder")[1]
147153

temscript/server.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class MicroscopeHandler(BaseHTTPRequestHandler):
1616
"condenser_stigmator", "diffraction_shift", "screen_current", "screen_position",
1717
"illumination_mode", "condenser_mode", "illuminated_area", "probe_defocus", "convergence_angle",
1818
"stem_magnification", "stem_rotation", "spot_size_index", "dark_field_mode", "beam_blanked",
19-
"instrument_mode", 'optics_state', 'state')
19+
"instrument_mode", 'optics_state', 'state', 'column_valves_open')
2020

2121
PUT_V1_FORWARD = ("image_shift", "beam_shift", "beam_tilt", "projection_mode", "magnification_index",
2222
"defocus", "intensity", "diffraction_shift", "objective_stigmator", "condenser_stigmator",
@@ -126,6 +126,13 @@ def do_PUT_V1(self, endpoint, query):
126126
response = self.get_microscope().set_detector_param(name, decoded_content)
127127
elif endpoint == "normalize":
128128
self.get_microscope().normalize(decoded_content)
129+
elif endpoint == "column_valves_open":
130+
state = bool(decoded_content)
131+
assert isinstance(self.server, MicroscopeServer)
132+
if self.server.allow_column_valves_open or not state:
133+
self.get_microscope().set_column_valves_open(state)
134+
else:
135+
raise ValueError("Opening of column valves is prohibited.")
129136
else:
130137
raise KeyError("Unknown endpoint: '%s'" % endpoint)
131138
return response
@@ -166,17 +173,19 @@ def do_PUT(self):
166173

167174

168175
class MicroscopeServer(HTTPServer, object):
169-
def __init__(self, server_address=('', 8080), microscope_factory=None):
176+
def __init__(self, server_address=('', 8080), microscope_factory=None, allow_column_valves_open=True):
170177
"""
171178
Run a microscope server.
172179
173180
:param server_address: (address, port) tuple
174181
:param microscope_factory: callable creating the BaseMicroscope instance to use
182+
:param allow_column_valves_open: Allow remote client to open column valves
175183
"""
176184
if microscope_factory is None:
177185
from .microscope import Microscope
178186
microscope_factory = Microscope
179187
self.microscope = microscope_factory()
188+
self.allow_column_valves_open = allow_column_valves_open
180189
super(MicroscopeServer, self).__init__(server_address, MicroscopeHandler)
181190

182191

0 commit comments

Comments
 (0)