From 34e1b86c72595501938e87ef99756da4ef4a6a9f Mon Sep 17 00:00:00 2001 From: Lorenzo Pivetta <lorenzo.pivetta@elettra.eu> Date: Mon, 29 May 2023 15:11:34 +0200 Subject: [PATCH] First import --- gen_seq_corr_monitor.m | 116 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 gen_seq_corr_monitor.m diff --git a/gen_seq_corr_monitor.m b/gen_seq_corr_monitor.m new file mode 100644 index 0000000..527e5fb --- /dev/null +++ b/gen_seq_corr_monitor.m @@ -0,0 +1,116 @@ +clear all; + + +for num_sequences=1:32 + +for num_cond=1:10 + +clear header; +clear footer; +clear blk; + +seq_name = sprintf('seq_corr_monitor_%02d_%02d.txt',num_sequences,num_cond); + +header{1} = '#'; +header{2} = '# Description: Calculate FEL On/Off state getting data from $devcorrcalc'; +header{3} = '# Author: Giulio Gaio'; +header{4} = '# Date: 2020/10/19'; +header{5} = '#'; + +cnt = 0; + +cnt = cnt + 1; +blk{cnt} = sprintf('step%d;sleep($sleep_monitor) && (read($devcorrcalc/State) != RUNNING) ? (write(this/FelOn) = 0) && goto(1) : (write(this/Cnt) = 0) && goto(2);Reading $devcorrcalc state;Error reading $devcorrcalc state;-1',cnt); + +for seq=1:num_sequences + cnt = cnt + 1; + blk{cnt} = sprintf('step%d;read($devcorrcalc/$attr%02d$) > read(this/CorrelThreshold) ? (write(this/Cnt) = (read(this/Cnt) + 1)) && goto(%d) : goto(%d);Reading $attr%02d$ value;Error reading $attr%02d$ value;-1;tangoerror=goto(%d)',cnt,seq,cnt+1,cnt+1,seq,seq,3+num_sequences+num_cond*2); +end + +% additional conditions +for i=1:num_cond + cnt = cnt + 1; + blk{cnt} = sprintf('step%d;(read(this/EnaCond%02d) == 1) ? goto(%d) : (write(this/ErrCond%02d) = 0) && goto(%d);Checking $cond_expr%02d;Error checking $cond_expr%02d;-1',cnt,i,cnt+1,i,cnt+2,i,i); + cnt = cnt + 1; + blk{cnt} = sprintf('step%d;($cond_expr%02d$) ? (write(this/ErrCond%02d) = 0) && goto(%d) : (write(this/ErrCond%02d) = 1) && goto(%d);Evaluating $cond_expr%02d$;Error evaluating $cond_expr%02d$;-1;tangoerror=goto(%d)',cnt,i,i,cnt+1,i,3+num_sequences+num_cond*2,i,i,3+num_sequences+num_cond*2); +end + +% FEL state calculation +cnt = cnt + 1; +blk{cnt} = sprintf('step%d;(write(this/FelEnabled) = 1) && read(this/Cnt) >= read(this/CntThreshold) ? (write(this/FelOn) = 1) && goto(1) : (write(this/FelOn) = 0) && goto(1);Calculating FEL state;Error calculating FEL state;-1',cnt); + +% Error step +cnt = cnt + 1; +blk{cnt} = sprintf('step%d;(write(this/FelOn) = 0) && (write(this/FelEnabled) = 0) && goto(1);Setting FEL error state;Setting FEL error state;-1',cnt); + + +% Dynamic attributes +cnt = 0; +cnt = cnt + 1; +footer{cnt} = 'attr;Cnt;long;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;CntThreshold;long;0'; +cnt = cnt + 1; +footer{cnt} = 'attr;CorrelThreshold;double;0.6'; + +for i=1:num_cond + cnt = cnt + 1; + footer{cnt} = sprintf('attr;EnaCond%02d;bool;1',i); +end + +for i=1:num_cond + cnt = cnt + 1; + footer{cnt} = sprintf('attr;ErrCond%02d;bool;0',i); +end + +cnt = cnt + 1; +footer{cnt} = 'attr;FelOn;bool;0'; + +cnt = cnt + 1; +footer{cnt} = 'attr;FelEnabled;bool;0'; + + +fileID = fopen(seq_name,'w'); +for i=1:size(header,2) + fprintf(fileID,'%s\n',header{i}); +end +for i=1:size(blk,2) + fprintf(fileID,'%s\n',blk{i}); +end +for i=1:size(footer,2) + fprintf(fileID,'%s\n',footer{i}); +end + +fclose(fileID); + +end +end + +% Dynamic R/W attributes +% +% User +% attr;CntThreshold;long;2 +% attr;CorrelThreshold;long;0.6 +% Internal +% attr;Cnt;long;0 +% attr;FelOn;bool;0 + + +% Wildcards +% $devcorrcalc=seq/calc/fast_stats_fel +% sleep_monitor=2 +% $sleep_monitor=1 +% $attr01$=t001_t002_Corr +% $attr02$=t001_t002_Corr +% +% ......... + + + + + + + + + + -- GitLab