Пример #1
0
def get_detector(prefix, kind=None, label=None, **kws):
    """returns best guess of which Detector class to use
       Mca, MultiMca, Motor, Scaler, Simple
       based on kind and/or record type.
    """
    dtypes = {'scaler': ScalerDetector,
              'motor': MotorDetector,
              'area': AreaDetector,
              'mca': McaDetector,
              'med': MultiMcaDetector,
              'multimca': MultiMcaDetector,
              # 'xspress3': Xspress3Detector,
              None: SimpleDetector}

    if kind is None:
        if prefix.endswith('.VAL'):
            prefix = prefix[-4]
        rtyp = caget("%s.RTYP" % prefix)
        if rtyp in ('motor', 'mca', 'scaler'):
            kind = rtyp
    else:
        kind = kind.lower()

    builder = dtypes.get(kind, SimpleDetector)
    return builder(prefix, label=label, **kws)
Пример #2
0
    def __init__(self, pvname, label=None, array=None, units=None,
                 extra_pvs=None, **kws):
        Saveable.__init__(self, pvname, label=label, units=units,
                          array=array, extra_pvs=extra_pvs, **kws)
        if isinstance(pvname, PV):
            self.pv = pvname
        else:
            self.pv = PV(pvname)
        self.pv.connect()

        self.units = units
        if self.pv.connected:
            self.pv.get_ctrlvars()
            if units is None:
                self.units = self.pv.units

        self.label = label
        if label is None and self.pv.connected:
            desc = pvname
            if '.' in pvname:
                idot = pvname.index('.')
                descpv = pvname[:idot] + '.DESC'
            else:
                descpv = pvname + '.DESC'
            try:
                desc = caget(descpv)
            except:
                pass
            self.label = desc
        if array is None: array  = []
        self.array = array

        if extra_pvs is None: extra_pvs = {}
        self.extra_pvs = extra_pvs
Пример #3
0
def get_detector(prefix, kind=None, label=None, **kws):
    """returns best guess of which Detector class to use
           Mca, MultiMca, Motor, Scaler, Simple
    based on kind and/or record type.
    """
    dtypes = {
        "scaler": ScalerDetector,
        "motor": MotorDetector,
        "area": AreaDetector,
        "mca": McaDetector,
        "med": MultiMcaDetector,
        "multimca": MultiMcaDetector,
        "xspress3": Xspress3Detector,
        None: SimpleDetector,
    }

    if kind is None:
        if prefix.endswith(".VAL"):
            prefix = prefix[-4]
        rtyp = caget("%s.RTYP" % prefix)
        if rtyp in ("motor", "mca", "scaler"):
            kind = rtyp
    else:
        kind = kind.lower()

    builder = dtypes.get(kind, SimpleDetector)
    return builder(prefix, label=label, **kws)
Пример #4
0
 def __init__(self, prefix, rtype=None, fields=None, outpvs=None):
     if prefix.endswith('.VAL'):
         prefix = prefix[-4]
     self.prefix = prefix
     if rtype is not None:
         if caget("%s.RTYP" % self.prefix) != rtype:
             raise TypeError(self.invalid_device_msg)
     self.outpvs = outpvs
     self.set_counters(fields)
Пример #5
0
 def __init__(self, prefix, outpvs=None, nchan=8, use_calc=False, use_unlabeled=False):
     DeviceCounter.__init__(self, prefix, rtype="scaler", outpvs=outpvs)
     prefix = self.prefix
     fields = [(".T", "CountTime")]
     extra_pvs = []
     nchan = int(nchan)
     for i in range(1, nchan + 1):
         label = caget("%s.NM%i" % (prefix, i))
         if len(label) > 0 or use_unlabeled:
             suff = ".S%i" % i
             if use_calc:
                 suff = "_calc%i.VAL" % i
                 extra_pvs.append(("Scaler.Calc%i" % i, "%s_calc%i.CALC" % (prefix, i)))
             fields.append((suff, label))
     self.extra_pvs = extra_pvs
     self.set_counters(fields)
Пример #6
0
 def __init__(self, prefix, outpvs=None, nrois=32,
              use_net=False,  use_unlabeled=False, use_full=False):
     nrois = int(nrois)
     DeviceCounter.__init__(self, prefix, rtype='mca', outpvs=outpvs)
     prefix = self.prefix
     fields = []
     for i in range(nrois):
         label = caget('%s.R%iNM' % (prefix, i))
         if len(label) > 0 or use_unlabeled:
             suff = '.R%i' % i
             if use_net:
                 suff = '.R%iN' % i
             fields.append((suff, label))
     if use_full:
         fields.append(('.VAL', 'mca spectra'))
     self.set_counters(fields)
Пример #7
0
 def __init__(self, prefix, outpvs=None, nchan=8,
              use_calc=False,  use_unlabeled=False):
     DeviceCounter.__init__(self, prefix, rtype='scaler',
                            outpvs=outpvs)
     prefix = self.prefix
     fields = [('.T', 'CountTime')]
     extra_pvs = []
     nchan = int(nchan)
     for i in range(1, nchan+1):
         label = caget('%s.NM%i' % (prefix, i))
         if len(label) > 0 or use_unlabeled:
             suff = '.S%i' % i
             if use_calc:
                 suff = '_calc%i.VAL' % i
                 extra_pvs.append(('Scaler.Calc%i' % i,
                                   '%s_calc%i.CALC' % (prefix, i)))
             fields.append((suff, label))
     self.extra_pvs = extra_pvs
     self.set_counters(fields)
Пример #8
0
    def __init__(self, prefix, outpvs=None, nrois=32, rois=None, use_net=False, use_unlabeled=False, use_full=False):
        nrois = int(nrois)
        DeviceCounter.__init__(self, prefix, rtype="mca", outpvs=outpvs)

        # use roilist to limit ROI to those listed:
        roilist = None
        if rois is not None:
            roilist = [s.lower().strip() for s in rois]

        prefix = self.prefix
        fields = []
        for i in range(nrois):
            label = caget("%s.R%iNM" % (prefix, i))
            if roilist is not None and label.lower().strip() not in roilist:
                continue
            if len(label) > 0 or use_unlabeled:
                suff = ".R%i" % i
                if use_net:
                    suff = ".R%iN" % i
                fields.append((suff, label))
        if use_full:
            fields.append((".VAL", "mca spectra"))
        self.set_counters(fields)
Пример #9
0
 def __init__(self, prefix, label=None):
     pvname = '%s.RBV' % prefix
     if label is None:
         label = "%s(actual)" % caget('%s.DESC' % prefix)
     Counter.__init__(self, pvname, label=label) # , rtype='motor')