Skip to content

Commit a1d1a9a

Browse files
authored
Fix PR111 and RED frame bugs (#114)
* Move `instamatic.typing` to `typing_` to avoid import conflicts * `MediaGrabber`: fix bug: `get_media` cleared `continuousCollectionEvent` * Fix RED frame logging * `instamatic.typing_`: rename to `_typing`
1 parent 81d4639 commit a1d1a9a

11 files changed

Lines changed: 28 additions & 19 deletions

File tree

src/instamatic/camera/videostream.py

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import atexit
44
import threading
5+
from contextlib import contextmanager
56
from dataclasses import dataclass
67
from typing import List, Optional, Union
78

@@ -162,16 +163,15 @@ def get_movie(self, n_frames: int, exposure=None, binsize=None):
162163
return self._get_media(request)
163164

164165
def _get_media(self, request: MediaRequest) -> Union[np.ndarray, List[np.ndarray]]:
165-
self.block() # Stop the passive collection during request acquisition
166-
self.grabber.request = request
167-
self.grabber.acquireInitiateEvent.set()
168-
self.grabber.acquireCompleteEvent.wait()
169-
with self.grabber.lock:
170-
media = self.requested_media
171-
self.requested_media = None
172-
self.grabber.request = None
173-
self.grabber.acquireCompleteEvent.clear()
174-
self.unblock() # Resume the passive collection
166+
with self.blocked(): # Stop the passive collection during request acquisition
167+
self.grabber.request = request
168+
self.grabber.acquireInitiateEvent.set()
169+
self.grabber.acquireCompleteEvent.wait()
170+
with self.grabber.lock:
171+
media = self.requested_media
172+
self.requested_media = None
173+
self.grabber.request = None
174+
self.grabber.acquireCompleteEvent.clear()
175175
return media
176176

177177
def update_frametime(self, frametime):
@@ -187,6 +187,15 @@ def block(self):
187187
def unblock(self):
188188
self.grabber.continuousCollectionEvent.clear()
189189

190+
@contextmanager
191+
def blocked(self):
192+
"""Set `continuousCollectionEvent` within the statement scope only."""
193+
was_set_before = self.grabber.continuousCollectionEvent.is_set()
194+
self.grabber.continuousCollectionEvent.set()
195+
yield
196+
if not was_set_before:
197+
self.grabber.continuousCollectionEvent.clear()
198+
190199
def continuous_collection(self, exposure=0.1, n=100, callback=None):
191200
"""Function to continuously collect data Blocks the videostream while
192201
collecting data, and only shows collected images.

src/instamatic/experiments/red/experiment.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ def start_collection(self, exposure_time: float, tilt_range: float, stepsize: fl
129129
)
130130

131131
self.logger.info(
132-
'Data collected from {start_angle:.2f} degree to {end_angle:.2f} degree (camera length: {camera_length} mm).'
132+
f'Data collected from {start_angle:.2f} degree to {end_angle:.2f} degree (camera length: {self.camera_length} mm).'
133133
)
134134

135135
self.current_angle = angle

src/instamatic/gui/red_frame.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,10 @@ def get_params(self, task=None):
139139

140140

141141
def acquire_data_RED(controller, **kwargs):
142-
controller.log.info('Start RED experiment')
143142
from instamatic.experiments import RED
144143

145144
task = kwargs['task']
145+
controller.log.info(task.title() + ' RED experiment')
146146

147147
exposure_time = kwargs['exposure_time']
148148
tilt_range = kwargs['tilt_range']

src/instamatic/microscope/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
from abc import ABC, abstractmethod
44
from typing import Optional, Tuple
55

6+
from instamatic._typing import float_deg, int_nm
67
from instamatic.microscope.utils import StagePositionTuple
7-
from instamatic.typing import float_deg, int_nm
88

99

1010
class MicroscopeBase(ABC):

src/instamatic/microscope/components/stage.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66

77
import numpy as np
88

9+
from instamatic._typing import float_deg, int_nm
910
from instamatic.microscope.base import MicroscopeBase
1011
from instamatic.microscope.utils import StagePositionTuple
11-
from instamatic.typing import float_deg, int_nm
1212

1313

1414
class Stage:

src/instamatic/microscope/interface/fei_microscope.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
from numpy import pi
1010

1111
from instamatic import config
12+
from instamatic._typing import float_deg, int_nm
1213
from instamatic.exceptions import FEIValueError, TEMCommunicationError
1314
from instamatic.microscope.base import MicroscopeBase
1415
from instamatic.microscope.utils import StagePositionTuple
15-
from instamatic.typing import float_deg, int_nm
1616

1717
logger = logging.getLogger(__name__)
1818

src/instamatic/microscope/interface/fei_simu_microscope.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
import comtypes.client
1010

1111
from instamatic import config
12+
from instamatic._typing import float_deg, int_nm
1213
from instamatic.exceptions import FEIValueError, TEMCommunicationError
1314
from instamatic.microscope.base import MicroscopeBase
1415
from instamatic.microscope.utils import StagePositionTuple
15-
from instamatic.typing import float_deg, int_nm
1616

1717
logger = logging.getLogger(__name__)
1818

src/instamatic/microscope/interface/jeol_microscope.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
import comtypes.client
99

1010
from instamatic import config
11+
from instamatic._typing import float_deg, int_nm
1112
from instamatic.exceptions import JEOLValueError, TEMCommunicationError, TEMValueError
1213
from instamatic.microscope.base import MicroscopeBase
1314
from instamatic.microscope.utils import StagePositionTuple
14-
from instamatic.typing import float_deg, int_nm
1515

1616
logger = logging.getLogger(__name__)
1717

src/instamatic/microscope/interface/simu_microscope.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
from typing import Optional, Tuple
66

77
from instamatic import config
8+
from instamatic._typing import float_deg, int_nm
89
from instamatic.exceptions import TEMValueError
910
from instamatic.microscope.base import MicroscopeBase
1011
from instamatic.microscope.utils import StagePositionTuple
11-
from instamatic.typing import float_deg, int_nm
1212

1313
NTRLMAPPING = {
1414
'GUN1': 0,

0 commit comments

Comments
 (0)