File: ad_fileplugin.py

package info (click to toggle)
python-pyepics 3.5.7%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,336 kB
  • sloc: python: 10,539; makefile: 112; javascript: 104; sh: 53
file content (94 lines) | stat: -rw-r--r-- 2,834 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
from .. import Device

class AD_FilePlugin(Device):
    """
    AreaDetector File Plugin
    """
    attrs = ("AutoIncrement", "AutoIncrement_RBV",
             "AutoSave", "AutoSave_RBV",
             "Capture", "Capture_RBV",
             "EnableCallbacks",  "EnableCallbacks_RBV",
             "FileName", "FileName_RBV",
             "FileNumber",  "FileNumber_RBV",
             "FilePath",  "FilePath_RBV",
             "FilePathExists_RBV",
             "FileTemplate", "FileTemplate_RBV",
             "FileWriteMode", "FileWriteMode_RBV",
             "FullFileName_RBV",
             "NDArrayPort",  "NDArrayPort_RBV",
             "NumCapture", "NumCapture_RBV", "NumCaptured_RBV",
             "ReadFile", "ReadFile_RBV",
             "WriteFile", "WriteFile_RBV",
             "WriteMessage", "WriteStatus")

    _nonpvs = ('_prefix', '_pvs', '_delim')

    def __init__(self, prefix):
        Device.__init__(self, prefix, delim='', mutable=False,
                              attrs=self.attrs)

    def ensure_value(self, attr, value, wait=False):
        """ensures that an attribute with an associated _RBV value is
        set to the specifed value
        """
        rbv_attr = "%s_RBV" % attr
        if rbv_attr not in self._pvs:
            return self._pvs[attr].put(value, wait=wait)

        if  self._pvs[rbv_attr].get(as_string=True) != value:
            self._pvs[attr].put(value, wait=wait)


    def setFileName(self,fname):
        return self.put('FileName',fname)

    def nextFileNumber(self):
        self.setFileNumber(1+self.get('FileNumber'))

    def setFileNumber(self, fnum=None):
        if fnum is None:
            self.put('AutoIncrement', 1)
        else:
            self.put('AutoIncrement', 0)
            return self.put('FileNumber',fnum)

    def setPath(self,pathname):
        return self.put('FilePath', pathname)

    def setTemplate(self, fmt):
        return self.put('FileTemplate', fmt)

    def setWriteMode(self, mode):
        return self.put('FileWriteMode', mode)

    def getLastFileName(self):
        return self.get('FullFileName_RBV',as_string=True)

    def CaptureOn(self):
        return self.put('Capture', 1)

    def CaptureOff(self):
        return self.put('Capture', 0)

    def setNumCapture(self,n):
        return self.put('NumCapture', n)

    def WriteComplete(self):
        return (0==self.get('WriteFile_RBV') )

    def getTemplate(self):
        return self.get('FileTemplate_RBV',as_string=True)

    def getName(self):
        return self.get('FileName_RBV',as_string=True)

    def getNumber(self):
        return self.get('FileNumber_RBV')

    def getPath(self):
        return self.get('FilePath_RBV',as_string=True)

    def getFileNameByIndex(self,index):
        return self.getTemplate() % (self.getPath(), self.getName(), index)