Files
frappy_sinq/timestamp.py
Markus Zolliker 9f7413a1a5 split lab.py in labcommands.py and timestamp.py
- timestamp.TimeStamp is used as a dummy detector
- labcommands may be used in lab expts. but is somehow outdated
2025-04-29 08:48:13 +02:00

125 lines
3.2 KiB
Python

# *****************************************************************************
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Module authors:
# Markus Zolliker <markus.zolliker@psi.ch>
#
# *****************************************************************************
"""helper devices for lab experiments"""
import time
from nicos.core import Override, Param, Measurable
from nicos.core.params import Value
class Timestamp(Measurable):
"""to be used as a 'detector' in lab experiments
just waiting the preset time
"""
parameter_overrides = {
'unit': Override(default='sec', mandatory=False),
}
parameters = {
'show': Param('show timestamp in data file', type=bool,
settable=True, default=True, mandatory=False),
}
_preset = 0
_time_used = 0
_start = 0
def _getCache(self):
"""no cache needed"""
self._cache = None
def doRead(self, maxage=0):
return time.time()
def doStatus(self, maxage=0):
return 100, ''
def doSetPreset(self, t=0, **preset):
self._start = 0
self._preset = t
self._value = 0
def doStart(self):
self._start = time.time()
def doPause(self):
self._time_used = time.time() - self._start
return True
def doResume(self):
self._start = time.time() - self._time_used
def doFinish(self):
pass
def doStop(self):
pass
def doIsCompleted(self):
return time.time() > self._start + self._preset
def valueInfo(self):
if self.show:
return Measurable.valueInfo(self)
return ()
class Det(Measurable):
"""wrap a Readable into a Detector
just for placing the result in a scan file in the detector part
"""
temporary = True
def __init__(self, dev):
self._dev = dev
Measurable.__init__(self, str(dev), unit=dev.unit, fmtstr=dev.fmtstr)
def _getCache(self):
"""no cache needed"""
self._cache = None
def doRead(self, maxage=0):
return self._dev.doRead(maxage)
def doStatus(self, maxage=0):
return self._dev.doStatus(maxage)
def doSetPreset(self, t=5, **preset):
self._start = 0
self._preset = t
def doStart(self):
self._start = time.time()
def doFinish(self):
pass
def doStop(self):
self._start = 0
def doIsCompleted(self):
return time.time() > self._start + self._preset
def valueInfo(self):
return Value(self.name, unit=self.unit, fmtstr=self.fmtstr),