class ScalerDetector(DetectorMixin): """Scaler Detector""" trigger_suffix = ".CNT" def __init__(self, prefix, nchan=8, use_calc=True, mode="scaler", rois=None, **kws): DetectorMixin.__init__(self, prefix, **kws) nchan = int(nchan) self.scaler = Scaler(prefix, nchan=nchan) self._counter = ScalerCounter(prefix, nchan=nchan, use_calc=use_calc) self.dwelltime_pv = get_pv("%s.TP" % prefix) self.dwelltime = None self.mode = mode self.counters = self._counter.counters self.extra_pvs = [("Scaler.frequency", "%s.FREQ" % prefix), ("Scaler.read_delay", "%s.DLY" % prefix)] self._repr_extra = ", nchans=%i, use_calc=%s" % (nchan, repr(use_calc)) self.extra_pvs.extend(self._counter.extra_pvs) def pre_scan(self, **kws): "run just prior to scan" self.ScalerMode(dwelltime=self.dwelltime) def post_scan(self, **kws): "run just after scan" self.ContinuousMode() def ScalerMode(self, dwelltime=1.0, numframes=1, **kws): "set to scaler mode, for step scanning" if dwelltime is not None: self.scaler.CountTime(dwelltime) return self.scaler.OneShotMode() def ContinuousMode(self, dwelltime=None, numframes=None, **kws): "set to continuous mode" if dwelltime is not None: self.scaler.CountTime(dwelltime) return self.scaler.AutoCountMode() def arm(self, mode=None, wait=False): "arm detector, ready to collect with optional mode" self.scaler.OneShotMode() def start(self, mode=None, arm=False, wait=False): "start detector, optionally arming and waiting" if arm: self.arm(mode=mode) self.scaler.Count(wait=wait) def stop(self, mode=None, disarm=False, wait=False): "stop detector, optionally disarming and waiting" self.scaler.put("CNT", 0, wait=wait) if disarm: self.disarm(mode=mode)
class ScalerDetector(DetectorMixin): """Scaler Detector""" trigger_suffix = '.CNT' def __init__(self, prefix, nchan=8, use_calc=True, mode='scaler', rois=None,**kws): DetectorMixin.__init__(self, prefix, **kws) nchan = int(nchan) self.scaler = Scaler(prefix, nchan=nchan) self._counter = ScalerCounter(prefix, nchan=nchan, use_calc=use_calc) self.dwelltime_pv = get_pv('%s.TP' % prefix) self.dwelltime = None self.mode = mode self.counters = self._counter.counters self.extra_pvs = [('Scaler.frequency', '%s.FREQ' % prefix), ('Scaler.read_delay', '%s.DLY' % prefix)] self._repr_extra = ', nchans=%i, use_calc=%s' % (nchan, repr(use_calc)) self.extra_pvs.extend(self._counter.extra_pvs) def pre_scan(self, **kws): "run just prior to scan" self.ScalerMode(dwelltime=self.dwelltime) def post_scan(self, **kws): "run just after scan" self.ContinuousMode() def ScalerMode(self, dwelltime=1.0, numframes=1, **kws): "set to scaler mode, for step scanning" if dwelltime is not None: self.scaler.CountTime(dwelltime) return self.scaler.put('CONT', 0, wait=True) def ContinuousMode(self, dwelltime=None, numframes=None, **kws): "set to continuous mode" if dwelltime is not None: self.scaler.CountTime(dwelltime) return self.scaler.AutoCountMode() def arm(self, mode=None, wait=True, fnum=None, **kws): "arm detector, ready to collect with optional mode" self.scaler.put('CONT', 0, wait=True) if wait: time.sleep(self.arm_delay) def start(self, mode=None, arm=False, wait=True): "start detector, optionally arming and waiting" if arm: self.arm(mode=mode) self.scaler.Count(wait=wait) if wait: time.sleep(self.start_delay) def stop(self, mode=None, disarm=False, wait=False): "stop detector, optionally disarming and waiting" self.scaler.put('CNT', 0, wait=wait) if disarm: self.disarm(mode=mode) def config_filesaver(self, **kws): "configure filesaver" pass