Initial Round of Sandbox implementation
This commit is contained in:
104
OpticsMachine.py
104
OpticsMachine.py
@@ -1,25 +1,95 @@
|
||||
import re
|
||||
import sys
|
||||
from typing import is_typeddict
|
||||
|
||||
|
||||
from sfbd.interface import getSnapPV,getSnapVal
|
||||
|
||||
from epics import PV
|
||||
|
||||
class Machine:
|
||||
def __init__(self):
|
||||
print('Initializing PVs for Snapshot...')
|
||||
mags = ['SINLH02-MBND100', 'SINBC02-MBND100', 'S10BC02-MBND100', 'SARCL02-MBND100', 'SATCL01-MBND100',
|
||||
'SATUN05-MBND100']
|
||||
self.snapPVs = getSnapPV() + [PV('%s:ENERGY-OP' % ele, auto_monitor=False) for ele in mags]
|
||||
self.omfilter = ['.*-RMSM:SM-SET','.*-RSYS:REQUIRED-OP','.*-RSYS:SET-ACC-VOLT','.*-RSYS:SET-BEAM-PHASE']
|
||||
def __init__(self, parent=None, office=False):
|
||||
self.parent=parent
|
||||
self.offline = office
|
||||
self.PVs={}
|
||||
self.PVNames = []
|
||||
|
||||
|
||||
def initPVs(self,elements=None):
|
||||
filters = ['-RMSM:SM-SET', '-RSYS:REQUIRED-OP', '-RSYS:SET-ACC-VOLT', '-RSYS:SET-BEAM-PHASE']
|
||||
self.PVNames.clear()
|
||||
for ele0 in elements:
|
||||
ele = ele0.Name.replace('.','-').upper()
|
||||
if 'MQUA' in ele:
|
||||
self.PVNames += [ele+':K1L-SET']
|
||||
if 'MSEX' in ele:
|
||||
self.PVNames += [ele+':K2L-SET']
|
||||
if 'MBND' in ele:
|
||||
if 'MBND100' in ele:
|
||||
self.PVNames += [ele + ':K0L-SET']
|
||||
elif 'SATMA01-MBND300' in ele:
|
||||
self.PVNames += [ele + ':K0L-SET']
|
||||
if 'RACC100' in ele:
|
||||
name=ele[0:7]
|
||||
self.PVNames += [name + filter for filter in filters]
|
||||
if 'UMOD' in ele:
|
||||
self.PVNames += [ele[0:7] + '-UMOD:K-SET']
|
||||
if 'UIND' in ele:
|
||||
if 'SARUN' in ele:
|
||||
self.PVNames += [ele + ':K_UND_SET']
|
||||
elif 'SATUN' in ele:
|
||||
self.PVNames += [ele + ':K_READ', ele + ':POL-SET']
|
||||
elif 'SINLH' in ele:
|
||||
self.PVNames += [ele + ':K-SP', ele + ':X-SP']
|
||||
self.PVNames += ['SINLH02-MBND100:ENERGY-OP']
|
||||
|
||||
def getSnap(self,filters = ['.*']):
|
||||
if isinstance(filters, str):
|
||||
filters = [filters]
|
||||
recomp = re.compile('|'.join(filters))
|
||||
# pvget = [pv for pv in self.snapPVs if recomp.match(pv.pvname)]
|
||||
# self.snap = getSnapVal(pvget)
|
||||
if self.offline:
|
||||
self.PVs = {ele: None for ele in self.PVNames}
|
||||
else:
|
||||
self.PVs={ele:PV(ele, auto_monitor=False) for ele in self.PVNames}
|
||||
|
||||
def getMachineStatus(self):
|
||||
if self.offline:
|
||||
values = {ele: self.PVs[ele] for ele in self.PVs.keys()}
|
||||
else:
|
||||
values = {ele:self.PVs[ele].get() for ele in self.PVs.keys()}
|
||||
|
||||
magnets={}
|
||||
rf = {}
|
||||
und={}
|
||||
energy={}
|
||||
for key in self.PVs.keys():
|
||||
if 'MQUA' in key or 'MSEX' in key:
|
||||
magnets[key[0:15]]=values[key]
|
||||
if 'MBND' in key:
|
||||
if 'SINBC' in key or 'SINLH' in key or 'S10BC' in key or 'SATMA' in key or 'SATUN' in key:
|
||||
magnets[key[0:15]] = values[key]
|
||||
if 'UMOD' in key:
|
||||
und[key[0:12]]=[values[key],0.]
|
||||
if 'UIND' in key:
|
||||
if 'SARUN' in key:
|
||||
und[key[0:15]]=[values[key],0]
|
||||
elif 'SATUN' in key and 'K_READ' in key:
|
||||
und[key[0:15]]=[values[key],values[key.replace('K_READ','POL-SET')]]
|
||||
elif 'SINLH' in key and 'K-SP' in key:
|
||||
x = values[key.replace('K-SP','X-SP')]
|
||||
if x is None:
|
||||
und[key[0:15]] = [None,0]
|
||||
elif x < -100:
|
||||
und[key[0:15]]=[0,0]
|
||||
else:
|
||||
und[key[0:15]] = [values[key], 0]
|
||||
if 'RMSM' in key:
|
||||
if values[key]is None:
|
||||
rf[key[0:7]+'-RSYS']=[None,0]
|
||||
elif values[key]<9:
|
||||
rf[key[0:7]+'-RSYS']=[0,0]
|
||||
else:
|
||||
# ['-RMSM:SM-SET', '-RSYS:REQUIRED-OP', '-RSYS:SET-ACC-VOLT', '-RSYS:SET-BEAM-PHASE']
|
||||
key = key.replace('RMSM:SM-SET','RSYS:REQUIRED-OP')
|
||||
if values[key] == 0:
|
||||
rf[key[0:7] + '-RSYS'] = [0, 0]
|
||||
else:
|
||||
key1 = key.replace('SM-SET','SET-ACC-VOLT')
|
||||
key2 = key.replace('SM-SET', 'SET-BEAM-PHASE')
|
||||
rf[key[0:7] + '-RSYS'] = [values[key1], values[key2]]
|
||||
if 'ENERGY-OP' in key:
|
||||
energy[key[0:15]]=values[key]
|
||||
|
||||
status={'Magnet':magnets,'RF':rf,'Undulator':und,'Energy':energy}
|
||||
return status
|
||||
|
||||
Reference in New Issue
Block a user