######################################################################### # The interface to integrate into the pipeline server # The following files are needed to be added to the library: # - CamDataProcess.py # - Config_Param.py # - LocalPV.py # - RecordTemplate.py # - RemotePV.py # - Service_Log.py # - Service_RFStation.py # - Service_Screen.py # - elog.py # # Created by Zheqiao Geng on 29.05.2024 ######################################################################### import os import time from cam_server.pipeline.data_processing import functions, processor from cam_server import utils from logging import getLogger from CamDataProcess import * from Service_RFStation import * from Config_Param import * from Service_Log import * # =============================================================== # global variables # =============================================================== _logger = getLogger(__name__) initialized = False srvRFs = None srvLog = None camPrc = None # =============================================================== # init function # =============================================================== def initialize(moduleName, instName): global srvRFs, srvLog, camPrc # get the RF station info if instName == 'TS': cav_label = ts_cav_label cpl_label = ts_cpl_label elif instName == 'SR1': cav_label = sr1_cav_label cpl_label = sr1_cpl_label elif instName == 'SR2': cav_label = sr2_cav_label cpl_label = sr2_cpl_label elif instName == 'SR3': cav_label = sr3_cav_label cpl_label = sr3_cpl_label elif instName == 'SR4': cav_label = sr4_cav_label cpl_label = sr4_cpl_label else: cav_label = '' cpl_label = '' # define the services srvRFs = Service_RFStation(loc=instName, cav_label=cav_label, cpl_label=cpl_label) srvLog = Service_Log(moduleName, loc=instName) # define the jobs camPrc = CamDataProcess(moduleName, instName, srv_scr=None, srv_rfs=srvRFs, srv_log=srvLog, f_path=file_path) # connect to all PVs RemotePV.connect() time.sleep(2.0) # start the threads camPrc.start() _logger.info('EPICS_CA_ADDR_LIST = ' + str(os.environ.get('EPICS_CA_ADDR_LIST'))) _logger.info('Data Path: ' + camPrc.f_path) _logger.info("Initialized") # =============================================================== # implement the image processing function (replacing the thread # function "DataRecvProcFunc" in "CamDataProcess.py") # =============================================================== def process_image(image, pulse_id, timestamp, x_axis, y_axis, parameters, bsdata=None): # declare the global variables global camPrc, initialized try: # initialization if not initialized: moduleName = parameters["camera_name"] instName = parameters["instName"] initialize(moduleName, instName) initialized = True # basic process of the image data = {'timestamp': utils.timestamp_as_float(timestamp), 'width': len(image[0]), 'height': len(image), 'image': image, 'arc_found': 0} # calculate the properties for arc detection x_profile, y_profile = functions.get_x_y_profile(image) min_value, max_value = functions.get_min_max(image) intensity = x_profile.sum() data['intensity'] = intensity data['min_value'] = min_value data['max_value'] = max_value data['x_profile'] = x_profile data['y_profile'] = y_profile # store to the circular buffer camPrc.receiveImage(data) return data except Exception as e: _logger.warning(str(e)) return None