Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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