@@ -47,6 +47,7 @@ def MPX_CMD(type_cmd: str = 'GET', cmd: str = 'DETECTORSTATUS') -> bytes:
4747class CameraMerlin :
4848 """Camera interface for the Quantum Detectors Merlin camera."""
4949 START_SIZE = 14
50+ MAX_NUMFRAMESTOACQUIRE = 42_949_672_950
5051
5152 def __init__ (self , name = 'merlin' ):
5253 """Initialize camera module."""
@@ -138,12 +139,12 @@ def setup_soft_trigger(self, exposure=None):
138139
139140 self ._frame_number = 0
140141
141- # Set NUMFRAMESTOACQUIRE to a large number
142- # Merlin will only collect this number of frames with SOFTTRIGGER
143- self .merlin_set ('NUMFRAMESTOACQUIRE' , 10_000 )
142+ # Set NUMFRAMESTOACQUIRE to maximum
143+ # Merlin collects up to this number of frames with a single SOFTTRIGGER acquisition
144+ self .merlin_set ('NUMFRAMESTOACQUIRE' , self . MAX_NUMFRAMESTOACQUIRE )
144145
145- self .merlin_set ('TRIGGERSTART' , '5' )
146- self .merlin_set ('NUMFRAMESPERTRIGGER' , '1' )
146+ self .merlin_set ('TRIGGERSTART' , 5 )
147+ self .merlin_set ('NUMFRAMESPERTRIGGER' , 1 )
147148 self .merlin_cmd ('STARTACQUISITION' )
148149
149150 start = self .receive_data (nbytes = self .START_SIZE )
@@ -175,7 +176,10 @@ def getImage(self, exposure=None, binsize=None, **kwargs) -> np.ndarray:
175176 self .setup_soft_trigger (exposure = exposure )
176177 elif exposure != self ._soft_trigger_exposure :
177178 logger .info ('Change exposure to %s s' , exposure )
178- self .teardown_soft_trigger ()
179+ self .setup_soft_trigger (exposure = exposure )
180+ elif self ._frame_number == self .MAX_NUMFRAMESTOACQUIRE :
181+ logger .debug (('Maximum frame number reached for this acquisition, '
182+ 'resetting soft trigger.' ) % self .MAX_NUMFRAMESTOACQUIRE )
179183 self .setup_soft_trigger (exposure = exposure )
180184
181185 self .merlin_cmd ('SOFTTRIGGER' )
0 commit comments