class MythenAcquireTime(DeviceBase, Readable): def __init__(self, mythen): DeviceBase.__init__(self, mythen.name + " acquire time") self.setParent(mythen) def read(self): return self.getParent().get_acquire_time(readback=False) class Mythen(DeviceBase, Readable): def __init__(self, name, prefix): DeviceBase.__init__(self, name) self.prefix = prefix self.acquire_time = MythenAcquireTime(self) def set_acquire_time(self, value): caput(self.prefix + ":cam1:AcquireTime", float(value)) def get_acquire_time(self, readback = True): if readback: return caget(self.prefix + ":cam1:AcquireTime_RBV", 'd') return caget(self.prefix + ":cam1:AcquireTime", 'd') def set_threshold(self, value): caput(self.prefix + ":cam1:ThresholdEnergy", int(value)) def get_threshold(self): return caget(self.prefix + ":cam1:ThresholdEnergy_RBV", 'i') def get_raw_data(self): return caget(self.prefix + ":Stats5:ProfileCursorX_RBV") #Single, Multiple, Continuous def set_acquire_mode(self, value): caput(self.prefix + ":cam1:ImageMode", value) def get_acquire_mode(self): return caget(self.prefix + ":cam1:ImageMode_RBV", 's') def is_acquiring(self): ret = caget( self.prefix + ":cam1:Acquire", 'i') == 1 self.setState(State.Busy if ret else State.Ready) return ret def start(self): caput( self.prefix + ":cam1:Acquire",1) self.setState(State.Busy) def stop(self): caput( self.prefix + ":cam1:Acquire",0) self.setState(State.Ready) def get_total_counts(self): ret = caget( self.prefix + ":Stats5:Total_RBV", 'l') self.setCache(ret, None) return ret def get_status(self): return caget(self.prefix + ":cam1:DetectorState_RBV") def doUpdate(self): self.read() self.is_acquiring() def abort(self): while (mythen.is_acquiring()): mythen.stop() time.sleep(0.25) def read(self): return self.get_total_counts() add_device( Mythen("mythen", "X04SA-ES2-SD1"), True) #mythen.polling = 1000 mythen.update()