Files
2025-12-08 10:27:24 +01:00

132 lines
4.0 KiB
Python

#########################################################################
# 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