diff --git a/FofbTool/Configuration.py b/FofbTool/Configuration.py index dca0bf78f15b3cfac0fa530add1e971f2b1f18aa..f371cdf058e1f5f4792efbeb87e667a05c67b1f7 100644 --- a/FofbTool/Configuration.py +++ b/FofbTool/Configuration.py @@ -15,10 +15,21 @@ import FofbTool.Utils # Get the module logger logger = logging.getLogger("FofbTool") +def trycatch_tango_devfailed(func): + def inner_function(*args, **kwargs): + try: + func(*args, **kwargs) + except tango.DevFailed as e: + logger.error("DevFailed met during configuration") + logger.debug(e) + return False + return inner_function + ################################################################################################### # CONFIGURE COM BPM ################################################################################################### +@trycatch_tango_devfailed def cellnode_configure_combpm(node_tangopath, bpmallowed): """ Configure the combpm block of a CellNode. @@ -58,6 +69,7 @@ def cellnode_configure_combpm(node_tangopath, bpmallowed): # CONFIGURE COM LBP ################################################################################################### +@trycatch_tango_devfailed def cellnode_configure_comlbp(node_tangopath, seqoffset=0): """ Configure the comlbp block of a CellNode. @@ -97,6 +109,7 @@ def cellnode_configure_comlbp(node_tangopath, seqoffset=0): ################################################################################################### +@trycatch_tango_devfailed def cellnode_configure_ccn(node_tangopath, nbpm, npsc): """ Configure the ComCellNode block on a cellnode. @@ -142,6 +155,7 @@ def cellnode_configure_ccn(node_tangopath, nbpm, npsc): logger.info("Configuration of CCN done on {}.".format(node_tangopath)) return True +@trycatch_tango_devfailed def centralnode_configure_ccn(node_tangopath, nbpm, npsc): """ Configure the ComCellNode block on the centralnode. @@ -188,6 +202,7 @@ def centralnode_configure_ccn(node_tangopath, nbpm, npsc): # CONFIGURE COM CORR ################################################################################################### +@trycatch_tango_devfailed def cellnode_configure_comcorr(node_tangopath, pscid, enable): """ Configure the comcorr block of a CellNode. @@ -231,6 +246,7 @@ def cellnode_configure_comcorr(node_tangopath, pscid, enable): # CONFIGURE MATRIX CORRECTOR ################################################################################################### +@trycatch_tango_devfailed def centralnode_configure_corr(node_tangopath, numbpm, pscid, k1x, k1y, k2x, k2y): """ Configure the correction algorithm on the centralnode. @@ -241,6 +257,10 @@ def centralnode_configure_corr(node_tangopath, numbpm, pscid, k1x, k1y, k2x, k2y The target fofbnode tango path, ie 'ans/dg/fofb-centralnode' k1x, k1y, k2x, k2y: list(int) List of coefficient for each filter. 4 coefficients : ABCD + + RETURN + ------ + success: boolean """ # Get device proxy diff --git a/FofbTool/Operation.py b/FofbTool/Operation.py index 90c811d3a91f2e5843cbf5b71b02d4f7844ad06d..1a57bff72929080ad6eef4456ec0074ccce436a4 100644 --- a/FofbTool/Operation.py +++ b/FofbTool/Operation.py @@ -16,10 +16,21 @@ import time logger = logging.getLogger("FofbTool") +def trycatch_tango_devfailed(func): + def inner_function(*args, **kwargs): + try: + func(*args, **kwargs) + except tango.DevFailed as e: + logger.error("DevFailed met during operation") + logger.debug(e) + return False + return inner_function + ################################################################################################### # OPERATIONS ON CCN ################################################################################################### +@trycatch_tango_devfailed def align_ccn(node_tangopath, comlbpif=0): """ Align FA sequence number on a cellnode. Returns the computed offset. @@ -107,6 +118,7 @@ def align_ccn(node_tangopath, comlbpif=0): return None return seqoffset +@trycatch_tango_devfailed def stop_ccn(node_tangopath, ccnif=[]): """ Stop the communication with cellnode on the specified fofbnode. @@ -119,6 +131,9 @@ def stop_ccn(node_tangopath, ccnif=[]): ccnif: list(int) List of the interface to stop. If empty, all the possible interface will be stopped. + RETURNS + ------- + bool: success """ try: @@ -126,7 +141,7 @@ def stop_ccn(node_tangopath, ccnif=[]): prx.ping() except tango.DevFailed: logger.error("Failed to obtain tango proxy or to ping to {}".format(node_tangopath)) - return None + return False if len(ccnif) == 0: ccnif = [int(a[7]) for a in prx.get_attribute_list() if "ccnpack" in a if "control" in a] @@ -140,6 +155,7 @@ def stop_ccn(node_tangopath, ccnif=[]): prx["ccnpack{}_control".format(n)] = False prx["ccnunpack{}_control".format(n)] = False +@trycatch_tango_devfailed def reset_ccn(node_tangopath, ccnif=[]): """ Reset the communication with cellnode on the specified fofbnode. @@ -152,6 +168,9 @@ def reset_ccn(node_tangopath, ccnif=[]): ccnif: list(int) List of the interface to stop. If empty, all the possible interface will be stopped. + RETURNS + ------- + bool: success """ try: @@ -159,7 +178,7 @@ def reset_ccn(node_tangopath, ccnif=[]): prx.ping() except tango.DevFailed: logger.error("Failed to obtain tango proxy or to ping to {}".format(node_tangopath)) - return None + return False if len(ccnif) == 0: ccnif = [int(a[6]) for a in prx.get_attribute_list() if "ccneth" in a if "gt_reset" in a] @@ -177,6 +196,7 @@ def reset_ccn(node_tangopath, ccnif=[]): ack_ccn(node_tangopath, ccnif) +@trycatch_tango_devfailed def start_ccn(node_tangopath, ccnif=[]): """ Start the communication with cellnode on the specified fofbnode. @@ -189,13 +209,16 @@ def start_ccn(node_tangopath, ccnif=[]): ccnif: list(int) List of the interface to stop. If empty, all the possible interface will be stopped. + RETURNS + ------- + bool: success """ try: prx=tango.DeviceProxy(node_tangopath) prx.ping() except tango.DevFailed: logger.error("Failed to obtain tango proxy or to ping to {}".format(node_tangopath)) - return None + return False if len(ccnif) == 0: ccnif = [int(a[7]) for a in prx.get_attribute_list() if "ccnpack" in a if "control" in a] @@ -212,6 +235,7 @@ def start_ccn(node_tangopath, ccnif=[]): prx["ccnpack{}_control".format(n)] = 1 prx["ccnunpack{}_control".format(n)] = 1 +@trycatch_tango_devfailed def ack_ccn(node_tangopath, ccnif=[]): """ Start the communication with cellnode on the specified fofbnode. @@ -224,13 +248,16 @@ def ack_ccn(node_tangopath, ccnif=[]): ccnif: list(int) List of the interface to stop. If empty, all the possible interface will be stopped. + RETURNS + ------- + bool: success """ try: prx=tango.DeviceProxy(node_tangopath) prx.ping() except tango.DevFailed: logger.error("Failed to obtain tango proxy or to ping to {}".format(node_tangopath)) - return None + return False if len(ccnif) == 0: ccnif = [int(a[7]) for a in prx.get_attribute_list() if "ccnpack" in a if "control" in a] @@ -250,6 +277,7 @@ def ack_ccn(node_tangopath, ccnif=[]): # OPERATIONS ON COMBPM ################################################################################################### +@trycatch_tango_devfailed def stop_combpm(node_tangopath): """ Stop the communication with bpm on the specified cellnode. @@ -259,18 +287,22 @@ def stop_combpm(node_tangopath): node_tangopath: str The target fofbnode tango path, ie 'ans/dg/fofb-cellnode-c09' + RETURN + ------ + success: boolean """ try: prx=tango.DeviceProxy(node_tangopath) prx.ping() except tango.DevFailed: logger.error("Failed to obtain tango proxy or to ping to {}".format(node_tangopath)) - return None + return False logger.info("Stopping ComBPM on {}".format(node_tangopath)) prx["combpm_reset"] = 1 prx["combpm_gt_control"] = 0x5 +@trycatch_tango_devfailed def start_combpm(node_tangopath): """ Start the communication with bpm on the specified cellnode. @@ -280,6 +312,9 @@ def start_combpm(node_tangopath): node_tangopath: str The target fofbnode tango path, ie 'ans/dg/fofb-cellnode-c09' + RETURN + ------ + success: boolean """ try: prx=tango.DeviceProxy(node_tangopath) @@ -295,6 +330,7 @@ def start_combpm(node_tangopath): ack_combpm(node_tangopath) +@trycatch_tango_devfailed def ack_combpm(node_tangopath): """ Ack errors on the communication with bpm on the specified cellnode. @@ -304,13 +340,16 @@ def ack_combpm(node_tangopath): node_tangopath: str The target fofbnode tango path, ie 'ans/dg/fofb-cellnode-c09' + RETURN + ------ + success: boolean """ try: prx=tango.DeviceProxy(node_tangopath) prx.ping() except tango.DevFailed: logger.error("Failed to obtain tango proxy or to ping to {}".format(node_tangopath)) - return None + return False logger.info("Ack ComBpm on {}".format(node_tangopath)) prx["combpm_reset_error"] = True @@ -322,6 +361,7 @@ def ack_combpm(node_tangopath): # OPERATIONS ON COMLBP ################################################################################################### +@trycatch_tango_devfailed def stop_comlbp(node_tangopath): """ Stop the communication with LBP on the specified cellnode. @@ -331,13 +371,16 @@ def stop_comlbp(node_tangopath): node_tangopath: str The target fofbnode tango path, ie 'ans/dg/fofb-cellnode-c09' + RETURN + ------ + success: boolean """ try: prx=tango.DeviceProxy(node_tangopath) prx.ping() except tango.DevFailed: logger.error("Failed to obtain tango proxy or to ping to {}".format(node_tangopath)) - return None + return False logger.info("Stopping ComLBP on {}".format(node_tangopath)) for n in range(4): @@ -346,6 +389,7 @@ def stop_comlbp(node_tangopath): for n in range(4): prx["comlbp{}_control".format(n)] = 0 +@trycatch_tango_devfailed def start_comlbp(node_tangopath): """ Start the communication with LBP on the specified cellnode. @@ -355,19 +399,23 @@ def start_comlbp(node_tangopath): node_tangopath: str The target fofbnode tango path, ie 'ans/dg/fofb-cellnode-c09' + RETURN + ------ + success: boolean """ try: prx=tango.DeviceProxy(node_tangopath) prx.ping() except tango.DevFailed: logger.error("Failed to obtain tango proxy or to ping to {}".format(node_tangopath)) - return None + return False logger.info("Starting ComLBP on {}".format(node_tangopath)) for n in range(4): prx["comlbp{}_control".format(n)] = 0x10 +@trycatch_tango_devfailed def reset_comlbp(node_tangopath): """ Reset the communication with LBP on the specified cellnode. @@ -377,13 +425,16 @@ def reset_comlbp(node_tangopath): node_tangopath: str The target fofbnode tango path, ie 'ans/dg/fofb-cellnode-c09' + RETURN + ------ + success: boolean """ try: prx=tango.DeviceProxy(node_tangopath) prx.ping() except tango.DevFailed: logger.error("Failed to obtain tango proxy or to ping to {}".format(node_tangopath)) - return None + return False logger.info("Reset ComLBP on {}".format(node_tangopath)) for n in range(4): @@ -557,6 +608,7 @@ def electron_stop_com(bpmlist): # OPERATIONS FOR LBP and Electron SYNCHRONIZATION ################################################################################################### +@trycatch_tango_devfailed def sync_bpm(bpmidlist, lbpevrx, timinglocal, timingcentral): """ Synchronize all BPM electronics, Electron and Brillance Plus. @@ -573,6 +625,9 @@ def sync_bpm(bpmidlist, lbpevrx, timinglocal, timingcentral): timingcentral: str Tango path of timing central + RETURN + ------ + success: boolean """ EVN=240 # Event number bpmlist = [b[1] for b in bpmidlist]