Source code for contrast.detectors.AdLink
from .Detector import Detector, TriggeredDetector
try:
import PyTango
except ModuleNotFoundError:
pass
import numpy as np
[docs]class AdLinkAnalogInput(Detector, TriggeredDetector):
"""
Interface to the AdLink Tango device exposing one analog input.
"""
def __init__(self, name=None, device=None):
self.dev_name = device
Detector.__init__(self, name=name)
TriggeredDetector.__init__(self)
def initialize(self):
self.dev = PyTango.DeviceProxy(self.dev_name)
self.dev.init()
self.stop() # needs to be in standby to change anything
self.dev.write_attribute("TriggerSources", "ExtD:+")
self.dev.write_attribute("TriggerMode", 1)
self.dev.write_attribute("NumOfDisplayableTriggers", -1)
self.dev.write_attribute("ChannelSamplesPerTrigger", 100)
def prepare(self, acqtime, dataid, n_starts):
if self.busy():
raise Exception('%s is busy!' % self.name)
if self.hw_trig:
# fixed at 100 samples per trigger in the Adlink device:
srate = int(np.ceil(100.0 / acqtime))
self.dev.write_attribute('NumOfTriggers', self.hw_trig_n)
self.dev.write_attribute('SampleRate', srate)
else:
print('Warning: the AdLinkAnalogInput detector only works '
+ 'with hardware triggering.')
def arm(self):
if self.busy():
raise Exception('%s is busy!' % self.name)
if self.hw_trig:
self.dev.Start()
def start(self):
pass
def stop(self):
if not self.dev.State() == PyTango.DevState.STANDBY:
# AdLink gets angry if you stop it in standby
self.dev.Stop()
def busy(self):
return (self.dev.State() == PyTango.DevState.RUNNING)
def read(self):
if not self.hw_trig:
return -1
vals = self.dev.read_attribute("C00_MeanValues").value
self.dev.Stop() # have to explicitly call stop after the read
return np.array(vals)