Skip to content
Snippets Groups Projects
DG_PY_FOFBTool.py 6.6 KiB
Newer Older
BRONES Romain's avatar
BRONES Romain committed
# -*- coding: utf-8 -*-
#
# This file is part of the DG_PY_FOFBTool project
#
#
#
# Distributed under the terms of the GPL license.
# See LICENSE.txt for more info.

""" 

"""

# PyTango imports
import tango
from tango import DebugIt
from tango.server import run
from tango.server import Device
from tango.server import attribute, command
from tango.server import device_property
from tango import AttrQuality, DispLevel, DevState
from tango import AttrWriteType, PipeWriteType
# Additional import
#----- PROTECTED REGION ID(DG_PY_FOFBTool.additionnal_import) ENABLED START -----#
import FofbTool.Operation
import FofbTool.Configuration
import logging

#----- PROTECTED REGION END -----#	//	DG_PY_FOFBTool.additionnal_import

__all__ = ["DG_PY_FOFBTool", "main"]


class DG_PY_FOFBTool(Device):
    """

    **Properties:**

    - Device Property
        combpm_bpmfilter
            - Each line gives the BPM id allowed in the combpm engine of the cellnode.\nOne line per cellnode, in the order of the cellnodepath property.
            - Type:'DevVarStringArray'
        tangopath_cellnode
            - Tango path of the cellnodes
            - Type:'DevVarStringArray'
        comcorr_pscid
            - Line by line PSCID to program on cellnode interface.\nOne line by cellnode
            - Type:'DevVarStringArray'
        tangopath_watcher
            - Tango path of FofbWatcher
            - Type:'DevString'
        corr_pscid
            - PSCID of the inv matrix lines
            - Type:'DevString'
        ccn_npsc
            - Number of PSC ID to send in centralnode frames.\nIdentical for all interfaces
            - Type:'DevULong'
        ccn_nbpm
            - Number of BPMID to pack in each cellnode.\nOne valeu per cellnode
            - Type:'DevVarLongArray'
        logfilepath
            - Type:'DevString'
        tangopath_centraltiming
            - Type:'DevString'
    """
    # PROTECTED REGION ID(DG_PY_FOFBTool.class_variable) ENABLED START #
    # PROTECTED REGION END #    //  DG_PY_FOFBTool.class_variable

    # -----------------
    # Device Properties
    # -----------------

    combpm_bpmfilter = device_property(
        dtype='DevVarStringArray',
        mandatory=True
    )

    tangopath_cellnode = device_property(
        dtype='DevVarStringArray',
        mandatory=True
    )

    comcorr_pscid = device_property(
        dtype='DevVarStringArray',
        mandatory=True
    )

    tangopath_watcher = device_property(
        dtype='DevString',
        mandatory=True
    )

    corr_pscid = device_property(
        dtype='DevString',
        mandatory=True
    )

    ccn_npsc = device_property(
        dtype='DevULong',
        mandatory=True
    )

    ccn_nbpm = device_property(
        dtype='DevVarLongArray',
        mandatory=True
    )

    logfilepath = device_property(
        dtype='DevString',
        mandatory=True
    )

    tangopath_centraltiming = device_property(
        dtype='DevString',
    )

    # ----------
    # Attributes
    # ----------

    includeLBP = attribute(
        dtype='DevBoolean',
        access=AttrWriteType.READ_WRITE,
    )

    # ---------------
    # General methods
    # ---------------

    def init_device(self):
        """Initialises the attributes and properties of the DG_PY_FOFBTool."""
        Device.init_device(self)
        #----- PROTECTED REGION ID(DG_PY_FOFBTool.init_device) ENABLED START -----#

        logger = logging.getLogger("FofbTool")
        try:
            fh=logging.FileHandler(self.logfilepath)
        except FileNotFoundError:
            logger.warning("Not logging to file, could not open location {}".format(self.logfilepath))
        else:
            fh.setLevel(logging.DEBUG)
            fh.setFormatter(logging.Formatter("{levelname:8}: {message}", style='{'))
            logger.addHandler(fh)
        logger.setLevel(logging.DEBUG)

        #----- PROTECTED REGION END -----#	//	DG_PY_FOFBTool.init_device

    def always_executed_hook(self):
        """Method always executed before any TANGO command is executed."""
        #----- PROTECTED REGION ID(DG_PY_FOFBTool.always_executed_hook) ENABLED START -----#
        
        #----- PROTECTED REGION END -----#	//	DG_PY_FOFBTool.always_executed_hook

    def delete_device(self):
        """Hook to delete resources allocated in init_device.

        This method allows for any memory or other resources allocated in the
        init_device method to be released.  This method is called by the device
        destructor and by the device Init command.
        """
        #----- PROTECTED REGION ID(DG_PY_FOFBTool.delete_device) ENABLED START -----#
        
        #----- PROTECTED REGION END -----#	//	DG_PY_FOFBTool.delete_device
    # ------------------
    # Attributes methods
    # ------------------

    def read_includeLBP(self):
        # PROTECTED REGION ID(DG_PY_FOFBTool.includeLBP_read) ENABLED START #
        """Return the includeLBP attribute."""
        return self._include_lbp
        # PROTECTED REGION END #    //  DG_PY_FOFBTool.includeLBP_read

    def write_includeLBP(self, value):
        # PROTECTED REGION ID(DG_PY_FOFBTool.includeLBP_write) ENABLED START #
        """Set the includeLBP attribute."""
        pass
        # PROTECTED REGION END #    //  DG_PY_FOFBTool.includeLBP_write

    # --------
    # Commands
    # --------

    @command(
    )
    @DebugIt()
    def configure(self):
        # PROTECTED REGION ID(DG_PY_FOFBTool.configure) ENABLED START #
        """

        :return:None
        """

        self.debug_stream("Configure COMBPM")
        for cn, bpm in zip(self.tangopath_cellnode, self.combpm_bpmfilter):
            bpmid = [int(b) for b in bpm.split()]
            self.debug_stream("Set {} to {}".format(cn, bpmid))
            FofbTool.Configuration.cellnode_configure_combpm(cn, bpmid)

        # PROTECTED REGION END #    //  DG_PY_FOFBTool.configure

    @command(
    )
    @DebugIt()
    def stop(self):
        # PROTECTED REGION ID(DG_PY_FOFBTool.stop) ENABLED START #
        """

        :return:None
        """
        pass
        # PROTECTED REGION END #    //  DG_PY_FOFBTool.stop

    @command(
    )
    @DebugIt()
    def start(self):
        # PROTECTED REGION ID(DG_PY_FOFBTool.start) ENABLED START #
        """

        :return:None
        """
        pass
        # PROTECTED REGION END #    //  DG_PY_FOFBTool.start

# ----------
# Run server
# ----------


def main(args=None, **kwargs):
    """Main function of the DG_PY_FOFBTool module."""
    # PROTECTED REGION ID(DG_PY_FOFBTool.main) ENABLED START #
    return run((DG_PY_FOFBTool,), args=args, **kwargs)
    # PROTECTED REGION END #    //  DG_PY_FOFBTool.main


if __name__ == '__main__':
    main()