diff --git a/Scripts/alarm_csv2xml.py b/Scripts/alarm_csv2xml.py
index d53e863..fbe6084 100755
--- a/Scripts/alarm_csv2xml.py
+++ b/Scripts/alarm_csv2xml.py
@@ -5,6 +5,7 @@
from xml.dom import minidom
import click
+import re
def csvtoxml(infile, outfile, cname):
@@ -28,11 +29,22 @@ def csvtoxml(infile, outfile, cname):
stack.append(sel)
else:
pv = ET.SubElement(stack[-1], 'pv')
- pv.set('name', row['PV'])
+ pv_name = row['PV']
+ pv_tokens = pv_name.split('://', 1)
+ if len(pv_tokens) == 2:
+ protocol = pv_tokens[0].lower()
+ if protocol == 'ca' or protocol == 'pva':
+ pass
+ elif protocol == 'major' or protocol == 'minor':
+ calc_expression = pv_tokens[1]
+ pv_name = f'eq://{protocol}Alarm({calc_expression}, "")'
+ else:
+ raise ValueError(f'Got unsupported protocol "{protocol}" in {pv_name}')
+ pv.set('name', pv_name)
desc = ET.SubElement(pv, 'description')
desc.text = row['Description']
latch = ET.SubElement(pv, 'latching')
- latch.text = row['Latch'].capitalize() if row['Latch'] else "True"
+ latch.text = row['Latch'].capitalize() if row['Latch'] else 'True'
delay = ET.SubElement(pv, 'delay')
delay.text = row['Delay']
if 'Filter' in row and row['Filter']:
@@ -48,7 +60,7 @@ def csvtoxml(infile, outfile, cname):
if outfile is None:
outfile = infile.rsplit('.', 1)[0] + '.xml'
with open(outfile, 'w', encoding='utf-8') as out:
- out.write(xm.toprettyxml(indent=" "*3))
+ out.write(xm.toprettyxml(indent=' '*3))
click.echo(f'Conversion of {infile} complete. See {outfile}')
diff --git a/Spreadsheet/KFE/TMO-alarms.csv b/Spreadsheet/KFE/TMO-alarms.csv
index 61a295f..495df54 100644
--- a/Spreadsheet/KFE/TMO-alarms.csv
+++ b/Spreadsheet/KFE/TMO-alarms.csv
@@ -124,3 +124,4 @@
,,LM1K4:QADC:01:OUT0_EDGE2,QADC signal monitor,,,LM1K4:QADC:01:OUT0_EDGE2>0,
1,LASER PHASE MOTOR,,,,,,
,,LAS:LHN:LLG2:01:PHAS:ERROR,Laser phase feedback,,,,
+,,major://(abs(SL1K0:POWER:ACTUAL_YWIDTH_RBV) * 1000) > AT1K0:GAS_MA_Y:MMS:1,slits too wide,,,,
diff --git a/XML/KFE/TMO-alarms.xml b/XML/KFE/TMO-alarms.xml
index b81add5..b514762 100644
--- a/XML/KFE/TMO-alarms.xml
+++ b/XML/KFE/TMO-alarms.xml
@@ -524,6 +524,11 @@
True
+
+ slits too wide
+ True
+
+