From 8c3f29f30b9c07e5e55e5501a2c9b972f4092038 Mon Sep 17 00:00:00 2001 From: Kaushik Malapati Date: Tue, 25 Feb 2025 22:26:18 -0800 Subject: [PATCH 1/4] Making formula pvs in xml file out of certain spreadsheet pvs --- Scripts/alarm_csv2xml.py | 15 ++++++++++++--- Spreadsheet/KFE/TMO-alarms.csv | 1 + XML/KFE/TMO-alarms.xml | 5 +++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/Scripts/alarm_csv2xml.py b/Scripts/alarm_csv2xml.py index d53e863..2bd6680 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,19 @@ def csvtoxml(infile, outfile, cname): stack.append(sel) else: pv = ET.SubElement(stack[-1], 'pv') - pv.set('name', row['PV']) + pv_name = row['PV'] + if pv_name.find('://') == 5: + severity = pv_name[0:5].lower() + if severity != 'major' and severity != 'minor': + raise ValueError('formula must being with major or minor but got {severity}') + calc_expression = re.sub(r'([a-zA-Z0-9_\-:.\[\]<>;]+:[a-zA-Z0-9_\-:.\[\]<>;]+)', r'\1', pv_name[8:]) + pv_name = f'eq://{severity}Alarm({calc_expression}, "")' + print(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 +57,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..f8fc19d 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,,,, +,,minor://(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..accede7 100644 --- a/XML/KFE/TMO-alarms.xml +++ b/XML/KFE/TMO-alarms.xml @@ -524,6 +524,11 @@ True + + slits too wide + True + + From 7b7373c0ce142cac0f3d0718fa4badf0a46ca4e2 Mon Sep 17 00:00:00 2001 From: Kaushik Malapati Date: Tue, 25 Feb 2025 23:10:45 -0800 Subject: [PATCH 2/4] removing backticks --- Scripts/alarm_csv2xml.py | 2 +- Spreadsheet/KFE/TMO-alarms.csv | 2 +- XML/KFE/TMO-alarms.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Scripts/alarm_csv2xml.py b/Scripts/alarm_csv2xml.py index 2bd6680..15e9df3 100755 --- a/Scripts/alarm_csv2xml.py +++ b/Scripts/alarm_csv2xml.py @@ -34,7 +34,7 @@ def csvtoxml(infile, outfile, cname): severity = pv_name[0:5].lower() if severity != 'major' and severity != 'minor': raise ValueError('formula must being with major or minor but got {severity}') - calc_expression = re.sub(r'([a-zA-Z0-9_\-:.\[\]<>;]+:[a-zA-Z0-9_\-:.\[\]<>;]+)', r'\1', pv_name[8:]) + calc_expression = pv_name[8:] pv_name = f'eq://{severity}Alarm({calc_expression}, "")' print(pv_name) pv.set('name', pv_name) diff --git a/Spreadsheet/KFE/TMO-alarms.csv b/Spreadsheet/KFE/TMO-alarms.csv index f8fc19d..495df54 100644 --- a/Spreadsheet/KFE/TMO-alarms.csv +++ b/Spreadsheet/KFE/TMO-alarms.csv @@ -124,4 +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,,,, -,,minor://(abs(SL1K0:POWER:ACTUAL_YWIDTH_RBV) * 1000) > AT1K0:GAS_MA_Y:MMS:1,slits too wide,,,, +,,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 accede7..b514762 100644 --- a/XML/KFE/TMO-alarms.xml +++ b/XML/KFE/TMO-alarms.xml @@ -524,7 +524,7 @@ True - + slits too wide True From af88fc2610c0b7b21dd4998094612db6552919ae Mon Sep 17 00:00:00 2001 From: Kaushik Malapati Date: Wed, 26 Feb 2025 18:40:11 -0800 Subject: [PATCH 3/4] making protocol check better --- Scripts/alarm_csv2xml.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Scripts/alarm_csv2xml.py b/Scripts/alarm_csv2xml.py index 15e9df3..5581706 100755 --- a/Scripts/alarm_csv2xml.py +++ b/Scripts/alarm_csv2xml.py @@ -30,13 +30,17 @@ def csvtoxml(infile, outfile, cname): else: pv = ET.SubElement(stack[-1], 'pv') pv_name = row['PV'] - if pv_name.find('://') == 5: - severity = pv_name[0:5].lower() - if severity != 'major' and severity != 'minor': - raise ValueError('formula must being with major or minor but got {severity}') - calc_expression = pv_name[8:] - pv_name = f'eq://{severity}Alarm({calc_expression}, "")' - print(pv_name) + 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}, "")' + print(pv_name) + 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'] From 6bacf0e1afabf4facdf13607f26b5f80d4e4acb0 Mon Sep 17 00:00:00 2001 From: Kaushik Malapati Date: Wed, 26 Feb 2025 18:40:41 -0800 Subject: [PATCH 4/4] removing debugging print statement --- Scripts/alarm_csv2xml.py | 1 - 1 file changed, 1 deletion(-) diff --git a/Scripts/alarm_csv2xml.py b/Scripts/alarm_csv2xml.py index 5581706..fbe6084 100755 --- a/Scripts/alarm_csv2xml.py +++ b/Scripts/alarm_csv2xml.py @@ -38,7 +38,6 @@ def csvtoxml(infile, outfile, cname): elif protocol == 'major' or protocol == 'minor': calc_expression = pv_tokens[1] pv_name = f'eq://{protocol}Alarm({calc_expression}, "")' - print(pv_name) else: raise ValueError(f'Got unsupported protocol "{protocol}" in {pv_name}') pv.set('name', pv_name)