The SicVar class
Keywords: gildas-python

Next: The SicStructure class Up: How SIC variables are Previous: Comments on the strategy Contents Index

### The `SicVar` class

`SicVar` instances should be automatically initialized with the `get()` function. When importing a variable, `get()` calls the instance creator `SicVar()` with three arguments: SIC variable name (as a Python string), its level (as an integer), and memory address of its descriptor (Python integer). It is the own responsibility of the `get()` function to assign this instance to the correct Python variable name.
During the initialization, `SicVar()` defines three attributes to the instance: `__sicname__`, `__siclevel__`, and `__sicdata__`. By convention the '`__`' delimiters denote objects that are hidden to the user, but still accessible. `__sicname__` and `__siclevel__` are a Python string and an integer, and are used to keep a trace of what the original SIC variable is. `__sicdata__` is a `numpy.ndarray` initialized with the informations provided by the descriptor (data address, dimensions, type,...).

    >>> Sic.define('real a')
     A               is a        REAL*4, 0D            (RW) -> a
    >>> vars(a)    # vars() displays attributes names and values
    {'__sicdata__': array(0.0, dtype=float32), '__sicname__': 'A', '__siclevel__': 0}
    >>> type(a.__sicdata__)
    <type 'numpy.ndarray'> # A NumPy array
    >>> type(a.__sicname__)
    <type 'str'>   # A Python string
    >>> type(a.__siclevel__)
    <type 'int'>   # A Python integer

`SicVar` instances are used to import SIC standard variables (scalars or arrays). Due to its class type, it can also accept new attributes, and thus be used to import images (for example in an instance named `ima`). In this case, the image (the array component) is imported through the `__sicdata__` attribute (`ima.__sicdata__`), and can be directly accessed from `ima` (`ima[0,0]`). Header variables are imported into other attributes (`ima.naxis1`, `ima.naxis2`,...), provided they do not attempt to overwrite a `numpy.ndarray` attribute or method. As any other imported SIC variables, these header attributes are themselves `SicVar` instances. See subsection 2.4.4 for details and example on importing SIC images.

All attributes of a `SicVar` instance are write-protected against deletion or overwriting. This is a first importance for `__sicdata__`, because deleting it would be dramatic. Remember that the command `a.__sicdata__` `= 0` do not modify its content but bounds it to the 0 integer, loosing data and all information about the corresponding SIC variable. But end-user should never have to deal with the `__sicdata__` attribute, and have to work on the instance itself instead (for example `a[0] = 0`).
These warnings also apply to images attributes: do not try `ima.naxis1 = 0` but `ima.naxis1[0] = 0` instead.

`SicVar` instances come with a set of methods and attributes, for one part inherited from the `numpy.ndarray` type, and for the other part (re)defined at instance initialization. For example the addition (`__add__` and `__radd__`) is redefined to add numbers or concatenate character strings.

    >>> dir(a) # All attributes and methods.
    ['__add__', '__copy__', '__deepcopy__', '__delattr__', '__div__',
    '__doc__', '__eq__', '__ge__', '__getattr__', '__getitem__',
    '__gt__', '__iadd__', '__idiv__', '__imul__', '__init__', '__int__',
    '__isub__', '__le__', '__len__', '__lt__', '__module__', '__mul__',
    '__ne__', '__nonzero__', '__radd__', '__rdiv__', '__repr__',
    '__rmul__', '__rsub__', '__setattr__', '__setitem__', '__sicdata__',
    '__sicname__', '__str__', '__sub__', 'astype', 'byteswapped',
    'copy', 'iscontiguous', 'itemsize', 'resize', 'savespace',
    'spacesaver', 'tolist', 'toscalar', 'tostring', 'typecode']

Next: The SicStructure class Up: How SIC variables are Previous: Comments on the strategy Contents Index