Skip to content
Merged
Show file tree
Hide file tree
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
2 changes: 2 additions & 0 deletions src/odemis/acq/milling/millmng.py
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,8 @@ def get_associated_tasks(wt: MillingWorkflowTask,
:return: List of associated tasks."""
associated_tasks = []
for task in milling_tasks.values():
if not task.selected:
Comment thread
tmoerkerken marked this conversation as resolved.
continue

if wt.value in task.name:
associated_tasks.append(task)
Expand Down
9 changes: 8 additions & 1 deletion src/odemis/acq/milling/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,10 @@ class MillingTaskSettings:

def __init__(self, milling: MillingSettings,
patterns: List[MillingPatternParameters],
name: str):
name: str,
selected: bool = True):
self.name: str = name
self.selected: bool = selected # Whether this task should be executed or not
self.milling: MillingSettings = milling
self.patterns: List[MillingPatternParameters] = patterns

Expand All @@ -81,6 +83,7 @@ def to_dict(self) -> dict:
:return: dictionary containing the milling task settings
"""
return {"name": self.name,
"selected": self.selected,
"milling": self.milling.to_dict(),
"patterns": [pattern.to_dict() for pattern in self.patterns]}

Expand All @@ -91,6 +94,7 @@ def from_dict(data: dict) -> "MillingTaskSettings":
:return: MillingTaskSettings"""
return MillingTaskSettings(
name=data.get("name", "Milling Task"),
selected=data.get("selected", True),
milling=MillingSettings.from_dict(data["milling"]),
patterns=[PATTERN_NAME_TO_CLASS[p["pattern"]].from_dict(p) for p in data["patterns"]])

Expand All @@ -102,6 +106,9 @@ def generate(self) -> List[MillingPatternParameters]:
:return: list of individual shapes to be drawn on the microscope
"""
patterns = []
if not self.selected:
return patterns

for pattern in self.patterns:
patterns.extend(pattern.generate())
return patterns
Expand Down
1 change: 1 addition & 0 deletions src/odemis/acq/milling/test/tasks_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ def test_milling_task_settings(self):

dict_data = milling_task_settings.to_dict()
self.assertEqual(dict_data["name"], "Milling Task")
self.assertEqual(dict_data["selected"], True)
self.assertEqual(dict_data["milling"], milling_settings.to_dict())
self.assertEqual(dict_data["patterns"][0], trench_pattern.to_dict())

Expand Down
11 changes: 6 additions & 5 deletions src/odemis/gui/cont/acquisition/cryo_acq.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
from odemis.gui.cont.acquisition.overview_stream_acq import (
OverviewStreamAcquiController, CorrelationDialogController,
)
from odemis.gui.cont.milling import pos_to_relative
from odemis.gui.util import call_in_wx_main, wxlimit_invocation
from odemis.gui.util.widgets import (
ProgressiveFutureConnector,
Expand Down Expand Up @@ -805,13 +806,13 @@ def _on_close_dialog(self, z_stack):

# redraw milling position
fibsem_tab = self._tab_data.main.getTabByName("meteor-fibsem")
if self._tab_data.main.currentFeature.value:
correlation_dict = self._tab_data.main.currentFeature.value.correlation_data
feature = self._tab_data.main.currentFeature.value
if feature:
correlation_dict = feature.correlation_data
if correlation_dict and correlation_dict.fib_projected_pois:
if correlation_dict.fm_pois:
# Update feature position according to POI in FM
pm = self._tab_data.main.posture_manager
feature = self._tab_data.main.currentFeature.value
feature_stage_bare = feature.get_posture_position(FM_IMAGING)
poi = correlation_dict.fm_pois[0]
poi_coords = poi.coordinates.value
Expand All @@ -823,8 +824,8 @@ def _on_close_dialog(self, z_stack):
feature.fm_focus_position.value = {"z": poi_coords[2]}
# Draw milling position in FIBSEM tab around the projected POI
target = correlation_dict.fib_projected_pois[0]
fibsem_tab.milling_task_controller.draw_milling_tasks(pos=(target.coordinates.value[0],
target.coordinates.value[1]))
rel_pos = pos_to_relative(target.coordinates.value[:2], feature.reference_image)
fibsem_tab.milling_task_controller.move_milling_tasks(rel_pos)

@call_in_wx_main
def _on_filename(self, name):
Expand Down
20 changes: 0 additions & 20 deletions src/odemis/gui/cont/features.py
Original file line number Diff line number Diff line change
Expand Up @@ -214,22 +214,6 @@ def save_milling_position(self, evt: wx.Event):
self._tab_data_model.main.currentFeature.value = None
self._tab_data_model.main.currentFeature.value = feature

def save_milling_tasks(self,
milling_tasks: Dict[str, MillingTaskSettings],
selected_milling_tasks: List[str]) -> None:
feature: CryoFeature = self._tab_data_model.main.currentFeature.value
if feature is None:
logging.warning("No feature selected")
return

# filter out the selected tasks
milling_tasks = {k: v for k, v in milling_tasks.items() if k in selected_milling_tasks}

feature.milling_tasks = copy.deepcopy(milling_tasks)
save_features(self._tab.conf.pj_last_path, self._tab_data_model.main.features.value)

# TODO: pattern size not updating

def _display_go_to_feature_warning(self) -> bool:
box = wx.MessageDialog(self._tab.main_frame,
message="The stage is currently in the SEM imaging position. "
Expand Down Expand Up @@ -393,10 +377,6 @@ def _on_current_feature_changes(self, feature):
ctrl_2_va=self._on_ctrl_feature_z_change,
va_2_ctrl=self._on_feature_focus_pos)

# if FIBSEM mode, and milling tasks are available, re-draw
if self.acqui_mode is guimod.AcquiMode.FIBSEM:
self._tab.milling_task_controller.set_milling_tasks(feature.milling_tasks)

def _on_feature_focus_pos(self, fm_focus_position: dict):
# Set the feature Z ctrl with the focus position
self._panel.ctrl_feature_z.SetValue(fm_focus_position["z"])
Expand Down
Loading