Trees | Index | Help |
|
---|
Package MDSplus :: Module mdsdevice :: Class Device |
|
object
--+ |Data
--+ |TreeNode
--+ | Device
Used for device support classes. Provides ORIGINAL_PART_NAME, PART_NAME and Add methods and allows referencing of subnodes as conglomerate node attributes.
Use this class as a superclass for device support classes. When creating a device support class include a class attribute called "parts" which describe the subnodes of your device implementation. The parts attribute should be a list or tuple of dict objects where each dict is a description of each subnode. The dict object should include a minimum of a 'path' key whose value is the relative path of the node (be sure to include the leading period or colon) and a 'type' key whose value is the usage type of the node. In addition you may optionally specify a 'value' key whose value is the actual value to store into the node when it is first added in the tree. Instead of a 'value' key, you can provide a 'valueExpr' key whose value is a string which is python code to be evaluated before writing the result into the node. Use a valueExpr when you need to include references to other nodes in the device. Lastly the dict instance may contain an 'options' key whose values are node options specified as a tuple of strings. Note if you only specify one option include a trailing comma in the tuple.The "parts" attribute is used to implement the Add and PART_NAME and ORIGNAL_PART_NAME methods of the subclass.
You can also include a part_dict class attribute consisting of a dict() instance whose keys are attribute names and whose values are nid offsets. If you do not provide a part_dict attribute then one will be created from the part_names attribute where the part names are converted to lowercase and the colons and periods are replaced with underscores. Referencing a part name will return another instance of the same device with that node as the node in the Device subclass instance. The Device class also supports the part_name and original_part_name attributes which is the same as doing devinstance.PART_NAME(None). NOTE: Device subclass names MUST BE UPPERCASE!
Sample usage1:from MDSplus import Device class MYDEV(Device): parts=[{'path':':COMMENT','type':'text'}, {'path':':INIT_ACTION','type':'action', 'valueExpr':"Action(Dispatch(2,'CAMAC_SERVER','INIT',50,None),Method(None,'INIT',head))", 'options':('no_write_shot',)}, {'path':':STORE_ACTION','type':'action', 'valueExpr':"Action(Dispatch(2,'CAMAC_SERVER','STORE',50,None),Method(None,'STORE',head))", 'options':('no_write_shot',)}, {'path':'.SETTINGS','type':'structure'}, {'path':'.SETTINGS:KNOB1','type':'numeric'}, {'path':'.SIGNALS','type':'structure'}, {'path':'.SIGNALS:CHANNEL_1','type':'signal','options':('no_write_model','write_once')}] def init(self,arg): knob1=self.settings_knob1.record return 1 def store(self,arg): from MDSplus import Signal self.signals_channel_1=Signal(32,None,42)Sample usage2:
from MDSplus import Device parts=[{'path':':COMMENT','type':'text'}, {'path':':INIT_ACTION','type':'action', 'valueExpr':"Action(Dispatch(2,'CAMAC_SERVER','INIT',50,None),Method(None,'INIT',head))", 'options':('no_write_shot',)}, {'path':':STORE_ACTION','type':'action', 'valueExpr':"Action(Dispatch(2,'CAMAC_SERVER','STORE',50,None),Method(None,'STORE',head))", 'options':('no_write_shot',)}, {'path':'.SETTINGS','type':'structure'}, {'path':'.SETTINGS:KNOB1','type':'numeric'}, {'path':'.SIGNALS','type':'structure'}, {'path':'.SIGNALS:CHANNEL_1','type':'signal','options':('no_write_model','write_once')}] part_dict={'knob1':5,'chan1':7} def init(self,arg): knob1=self.knob1.record return 1 def store(self,arg): from MDSplus import Signal self.chan1=Signal(32,None,42)If you need to reference attributes using computed names you can do something like:
for i in range(16): self.__setattr__('signals_channel_%02d' % (i+1,),Signal(...))
Method Summary | |
---|---|
None |
Initialize a Device instance |
__class_init__(cls)
(Class method) | |
Device |
Return TreeNode of subpart if name matches mangled node name. |
Device subclass instance |
Create class instance. (Static method) |
None |
Set value into device subnode if name matches a mangled subpart node name. |
Used to add a device instance to an MDSplus tree. (Class method) | |
Bring up a glade setup interface if one exists in the same package as the one providing the device subclass | |
Bring up a glade setup interface if one exists in the same package as the one providing the device subclass | |
onSetupWindowClose(self,
window)
| |
str |
Method to return the original part name. |
str |
Method to return the original part name. |
waitForSetups(cls)
(Class method) | |
Inherited from TreeNode | |
Convert TreeNode to string. | |
TreeNode |
Add device descendant. |
TreeNode |
Add node |
None |
Add a tagname to this node |
None |
Begin a record segment |
None |
Allocate space for a timestamped segment |
Bool |
Returns True if this node contains the same data as specified in the value argument |
bool |
Return true if this node contains data versions |
None |
Delete this node from the tree |
None |
Delete data from this node |
None |
Execute method on conglomerate element |
TreeNode |
Return sibling of this node |
TreeNode |
Return first child of this node. |
TreeNodeArray |
Return TreeNodeArray of children nodes. |
String |
Return MDSplus class name of this node |
int |
Return compressed data length of this node |
Int32 |
Return index of this node in a conglomerate |
TreeNodeArray |
Return TreeNodeArray of conglomerate elements |
Data |
Return data |
Int32 |
Get depth of this node in the tree |
TreeNodeArray |
Return TreeNodeArray of first level descendants (children and members). |
String |
Return the name of the data type stored in this node |
String |
Return full path of this node |
int |
Return uncompressed data length of this node |
str |
Return path relative to top of local tree |
str |
Return tree containing this node |
TreeNode |
Return first member node |
TreeNodeArray |
Return TreeNodeArray of this nodes members |
String |
Return shortest path string for this node |
int |
Return node index |
TreeNode |
Return tree node where path is relative to this node |
String |
Return node name |
TreeNodeArray |
Return tree nodes where path is relative to this node |
Int32 |
Return number of children nodes. |
int |
Return number of first level descendants (children and members) |
Int32 |
Return number of nodes in this conglomerate |
int |
Return number of members |
int |
return number of segments contained in this node |
String |
Return the original part name of node in conglomerate |
int |
Get id/gid value of account which wrote data to this node |
TreeNode |
Return parent of this node |
String |
Return path of this node |
Signal | None |
Return segment |
Dimension |
Return dimension of segment |
Data |
return end of segment |
Data |
return start of segment |
int |
Return action completion status |
ndarray |
Return tags of this node |
Uint64 |
Return time data was written |
Tree |
Return Tree associated with this node |
str |
Return usage of this node |
bool |
Return true if this is a child node |
bool |
Return true if node contains data which can be compressed |
bool |
Return true if node is set to compress on put |
bool |
Return true of compression is disabled for this node |
bool |
Return true if successful action completion is essential |
bool |
Return true if this subtree is to be included in pulse file |
bool |
Return true if this is a member node |
bool |
Return true if data storage to model is disabled for this node |
bool |
Return true if data storage to pulse file is disabled for this node |
bool |
Return True if node is turned on, False if not. |
bool |
Return true if this node contains segmented records |
bool |
Return true if data is setup information. |
bool |
Return true if node is set write once |
None |
Load a timestamped segment |
None |
Move node to another location in the tree and optionally rename the node |
None |
Store data |
None |
Load a timestamped segment row |
None |
Load a segment in a node |
None |
Load a timestamped segment |
None |
Remove a tagname from this node |
None |
Rename node this node |
None |
Restore tree context. |
None |
Set compress on put state of this node |
None |
Set do not compress state of this node |
None |
Set essential state of this node |
None |
Set include in pulse state of this node |
None |
Set no write model state for this node |
None |
Set no write shot state for this node |
None |
Turn node on or off |
None |
Enable/Disable node as a subtree |
None |
Set Tree associated with this node |
None |
Set the usage of a node |
None |
Set write once state of node |
None |
Update a segment |
Inherited from Data | |
Data |
Absolute value: x.__abs__() <==> abs(x) |
Data |
Add: x.__add__(y) <==> x+y |
Data |
And: x.__and__(y) <==> x&y |
Data |
Divide: x.__div__(y) <==> x/y |
Bool |
Equals: x.__eq__(y) <==> x==y |
Data |
Float: x.__float__() <==> float(x) |
Data |
Floordiv: x.__floordiv__(y) <==> x//y |
Bool |
Greater or equal: x.__ge__(y) <==> x>=y |
Data |
Subscript: x.__getitem__(y) <==> x[y] |
Bool |
Greater than: x.__gt__(y) <==> x>y |
int |
Integer: x.__int__() <==> int(x) |
Data |
Binary not: x.__invert__() <==> ~x |
Bool |
Less than or equal: x.__le__(y) <==> x<=y |
Data |
Length: x.__len__() <==> len(x) |
long |
Convert this object to python long |
Data |
Lrft binary shift: x.__lshift__(y) <==> x<<y |
Bool |
Less than: x.__lt__(y) <==> x<y |
Data |
Modulus: x.__mod__(y) <==> x%y |
Data |
Multiply: x.__mul__(y) <==> x*y |
Data |
Not equal: x.__ne__(y) <==> x!=y |
Data |
Negation: x.__neg__() <==> -x |
Bool |
Not equal 0: x.__nonzero__() <==> x != 0 |
Data |
Or: x.__or__(y) <==> x|y |
Data |
Unary plus: x.__pos__() <==> +x |
Data |
Reverse add: x.__radd__(y) <==> y+x |
Data |
Reverse divide: x.__rdiv__(y) <==> y/x |
string |
Return string representation |
Data |
x.__rfloordiv__(y) <==> y//x |
Data |
Reverse left binary shift: x.__rlshift__(y) <==> y<<x |
Data |
Reverse modulus: x.__rmod__(y) <==> y%x |
Data |
Multiply: x.__mul__(y) <==> x*y |
Data |
Or: x.__or__(y) <==> x|y |
Data |
Reverse right binary shift: x.__rrshift__(y) <==> y>>x |
Data |
Right binary shift: x.__rshift__(y) <==> x>>y |
Data |
Reverse subtract: x.__rsub__(y) <==> y-x |
Data |
Reverse xor: x.__rxor__(y) <==> y^x |
Data |
Subtract: x.__sub__(y) <==> x-y |
Data |
Xor: x.__xor__(y) <==> x^y |
Bool |
Return boolean |
Data |
Static method (routine in C++) which compiles the expression (via TdiCompile()) and returns the object instance correspondind to the compiled expression. (Static method) |
Scalar,Array |
Return primitimive value of the data. |
string |
Return string representation |
Data |
Return Data from serialized buffer. (Static method) |
Data |
Return dimension of object |
Data |
Return the result of TDI evaluate(this). |
Data |
Execute and expression inserting optional arguments into the expression before evaluating (Static method) |
Int8 |
Convert this data into a byte. |
Int8Array |
Convert this data into a byte array. |
Data |
Return dimension of object |
Float64 |
Convert this data into a float64. |
Data |
Get the error field. |
Float32 |
Convert this data into a float32. |
Data |
Returns the result of TDI GET_HELP(this). |
Int32 |
Convert this data into a int. |
Int32Array |
Convert this data into a int array. |
Int64 |
Convert this data into a long. |
Int64Array |
Convert this data into a long array. |
Int32Array |
Get the array dimensions as an integer array. |
Int16 |
Convert this data into a short. |
Int16Array |
Convert this data into a short array. |
String |
Convert this data into a STRING. |
Data |
Get value of tdi public variable (Static method) |
Data |
Return the TDI evaluation of UNITS_OF(this). |
Data |
Return MDSplus data class from value. (Static method) |
Bool |
return true if the represented data could have been changed since the last time this method has been called. |
Data |
Pop $value for expression evaluation |
None |
Set $value for expression evaluation |
Data |
Return raw part of object |
Uint8Array |
Return Uint8Array binary representation. |
None |
Set the Error field for this Data instance. |
None |
Set the Help field for this Data instance. |
Data |
Set tdi public variable with this data |
None |
Set units |
Float32Array |
Return sin() of data assuming data is in degrees |
Data |
Return units part of the object |
Data |
Return value part of object |
Inherited from object | |
x.__delattr__('name') <==> del x.name | |
x.__getattribute__('name') <==> x.name | |
x.__hash__() <==> hash(x) | |
helper for pickle | |
helper for pickle |
Property Summary | |
---|---|
Inherited from Data | |
descriptor | |
error | |
help | |
units | |
validation |
Instance Variable Summary | |
---|---|
Inherited from TreeNode | |
int | nid : node index of this node. |
Tree | tree : Tree instance that this node belongs to. |
Class Variable Summary | |
---|---|
NoneType |
gtkThread = None |
Instance Method Details |
---|
__init__(self,
node)
Initialize a Device instance
|
__getattr__(self,
name)
Return TreeNode of subpart if name matches mangled node name.
|
__setattr__(self, name, value)Set value into device subnode if name matches a mangled subpart node name. Otherwise assign value to class instance attribute.
|
DW_SETUP(self, *args)Bring up a glade setup interface if one exists in the same package as the one providing the device subclass The gtk.main() procedure must be run in a separate thread to avoid locking the main program. If this method is invoked via the Py() TDI function, care must be made to do unlock the python thread lock the first time a gtkMain thread is created. This thread unlocking has to be done in the Py TDI function after the GIL state has been restored. This method sets a public TDI variable, _PyReleaseThreadLock, which is inspected in the Py function and if defined, the Py function will release the thread lock. This locking scheme was arrived at after several days of trial and error and seems to work with at least Python versions 2.4 and 2.6. |
dw_setup(self, *args)Bring up a glade setup interface if one exists in the same package as the one providing the device subclass The gtk.main() procedure must be run in a separate thread to avoid locking the main program. If this method is invoked via the Py() TDI function, care must be made to do unlock the python thread lock the first time a gtkMain thread is created. This thread unlocking has to be done in the Py TDI function after the GIL state has been restored. This method sets a public TDI variable, _PyReleaseThreadLock, which is inspected in the Py function and if defined, the Py function will release the thread lock. This locking scheme was arrived at after several days of trial and error and seems to work with at least Python versions 2.4 and 2.6. |
ORIGINAL_PART_NAME(self, arg)Method to return the original part name. Will return blank string if part_name class attribute not defined or node used to create instance is the head node or past the end of part_names tuple.
|
PART_NAME(self, arg)Method to return the original part name. Will return blank string if part_name class attribute not defined or node used to create instance is the head node or past the end of part_names tuple.
|
Static Method Details |
---|
__new__(cls, node)Create class instance. Initialize part_dict class attribute if necessary.
|
Class Method Details |
---|
Add(cls, tree, path)Used to add a device instance to an MDSplus tree. This method is invoked when a device is added to the tree when using utilities like mdstcl and the traverser. For this to work the device class name (uppercase only) and the package name must be returned in the MdsDevices tdi function. Also the Device subclass must include the parts attribute which is a list or tuple containing one dict instance per subnode of the device. The dict instance should include a 'path' key set to the relative node name path of the subnode. a 'type' key set to the usage string of the subnode and optionally a 'value' key or a 'valueExpr' key containing a value to initialized the node or a string containing python code which when evaluated during the adding of the device after the subnode has been created produces a data item to store in the node. And finally the dict instance can contain an 'options' key which should contain a list or tuple of strings of node attributes which will be turned on (i.e. write_once). |
Class Variable Details |
---|
gtkThread
|
Trees | Index | Help |
|
---|
Generated by Epydoc 2.1 on Wed Aug 18 13:35:30 2010 | http://epydoc.sf.net |