diff --git a/gen_seq_scan1d_array.m b/gen_seq_scan1d_array.m
new file mode 100644
index 0000000000000000000000000000000000000000..58dc4b7f0187f2804f72fc6e339361fe40fe17a2
--- /dev/null
+++ b/gen_seq_scan1d_array.m
@@ -0,0 +1,113 @@
+clear all;
+
+for num_sequences=1:30
+
+seq_name = sprintf('seq_scan1d_array_%d.txt',num_sequences);
+
+header{1} = '#';
+header{2} = '# Description: $description';
+header{3} = '# Author: Sequencer Library';
+header{4} = '# Date: 2020/04/12';
+header{5} = '#';
+header{6} = sprintf('# This sequence performs a 1D scan of %d steps of $devactuator_attr optimizing $devtarget_attr',num_sequences);
+header{7} = '#';
+
+cnt = 0;
+
+error_step = 1 + 7 * num_sequences + 5;
+
+cnt = cnt + 1;
+blk{cnt}=sprintf('step%d;(write(this/ActuatorStart) = read($devactuator_attr)) && (write(this/ActuatorBest) = read(this/ActuatorStart)) && (write(this/TargetBest) = read($devtarget_attr)) && goto(%d);Initializing variables;Error initializing variables;-1',cnt,cnt+1);
+
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    blk{cnt}=sprintf('step%d;read(this/AbsMode) == 1 ? (write(this/ActuatorSet) = (read(this/Val%d)*read(this/Gain)))  && goto(%d) : (write(this/ActuatorSet) = (read(this/ActuatorStart) + (read(this/Val%d)*read(this/Gain)))) && goto(%d);Setting $devactuator_attr;Error setting $devactuator_attr;-1;tangoerror=goto(%d)',cnt,seq,cnt+1,seq,cnt+1,error_step);
+    cnt = cnt + 1;
+    blk{cnt}=sprintf('step%d;((read(this/ActuatorSet) < read(this/ActuatorMin)) || (read(this/ActuatorSet) > read(this/ActuatorMax))) ? goto(%d) : (write($devactuator_attr) = read(this/ActuatorSet)) && sleep($sleep_step) && goto(%d);Setting $devactuator_attr;Error setting $devactuator_attr;-1;tangoerror=goto(%d)',cnt,cnt+6,cnt+1,error_step);
+    cnt = cnt + 1;
+    blk{cnt}=sprintf('step%d;read(this/EnableSeq) == 1 ? command($devseq/Start) && goto(%d) : goto(%d);Starting $devseq;Error starting $devseq;-1;tangoerror=goto(%d)',cnt,cnt+1,cnt+3,error_step);
+    cnt = cnt + 1;
+    blk{cnt}=sprintf('step%d;sleep($sleep_monitor) && (read($devseq/State) == RUNNING) ? goto(%d) : goto(%d);Waiting $devseq RUNNING;Error waiting $devseq;60000;timeouterror=goto(%d),tangoerror=goto(%d)',cnt,cnt,cnt+1,error_step,error_step);
+    cnt = cnt + 1;
+    blk{cnt}=sprintf('step%d;(read($devseq/State) == FAULT) ? goto(%d) : goto(%d);Waiting $devseq RUNNING;Error waiting $devseq;-1;tangoerror=goto(%d)',cnt,error_step,cnt+1,error_step);
+    cnt = cnt + 1;
+    blk{cnt}=sprintf('step%d;(write(this/TargetNow) = read($devtarget_attr)) && (abs(read(this/TargetNow) - read(this/TargetReference)) < abs(read(this/TargetBest)-read(this/TargetReference))) ? (write(this/TargetBest) = read(this/TargetNow)) && goto(%d) : goto(%d);Acquring $devtarget_attr;Error acquiring $devtarget_attr;-1;tangoerror=goto(%d)',cnt,cnt+1,cnt+2,error_step);
+    cnt = cnt + 1;
+    blk{cnt}=sprintf('step%d;read(this/AbsMode) == 1 ? (write(this/ActuatorBest) = (read(this/Val%d)*read(this/Gain))) && goto(%d) : (write(this/ActuatorBest) = (read(this/ActuatorStart) + (read(this/Val%d)*read(this/Gain)))) && goto(%d);Saving best actuator $devactuator_attr;Error saving best actuator $devactuator_attr;-1;tangoerror=goto(%d)',cnt,seq,cnt+1,seq,cnt+1,error_step);
+end
+
+% set best actuator
+cnt = cnt + 1; 
+blk{cnt}=sprintf('step%d;(write($devactuator_attr) = read(this/ActuatorBest))&& sleep($sleep_step) && goto(%d);Setting best actuator $devactuator_attr;Error setting best actuator $devactuator_attr;-1;tangoerror=goto(%d)',cnt,cnt+5,error_step);
+
+% last sequencer step
+cnt = cnt + 1;
+blk{cnt}=sprintf('step%d;read(this/EnableSeq) == 1 ? command($devseq/Start) && goto(%d) : goto(%d);Starting $devseq;Error starting $devseq;-1;tangoerror=goto(%d)',cnt,cnt+1,cnt+4,error_step);
+cnt = cnt + 1;
+blk{cnt}=sprintf('step%d;sleep($sleep_monitor) && (read($devseq/State) == RUNNING) ? goto(%d) : goto(%d);Waiting $devseq RUNNING;Error waiting $devseq;60000;timeouterror=goto(%d),tangoerror=goto(%d)',cnt,cnt,cnt+1,error_step,error_step);
+cnt = cnt + 1;
+blk{cnt}=sprintf('step%d;(read($devseq/State) == FAULT) ? goto(%d) : goto(%d);Waiting $devseq RUNNING;Error waiting $devseq;-1;tangoerror=goto(%d)',cnt,error_step,cnt+2,error_step);
+
+% error step
+cnt = cnt + 1; 
+blk{cnt}=sprintf('step%d;(write($devactuator_attr) = read(this/ActuatorStart)) && sleep($sleep_step) && ((read(this/EnableSeq) == 1) && (read($devseq/State) == RUNNING)) ? command($devseq/Stop) && goto(-1) : goto(-1);Setting best actuator $devactuator_attr;Error setting best actuator $devactuator_attr;-1',cnt);
+
+
+% dynamic attributes
+cnt = 0;
+
+cnt = cnt + 1;
+footer{cnt} = 'attr;TargetReference;double;0';
+cnt = cnt + 1;
+footer{cnt} = 'attr;AbsMode;bool;0';
+cnt = cnt + 1;
+footer{cnt} = 'attr;EnableSeq;bool;0';
+cnt = cnt + 1;
+footer{cnt} = 'attr;Gain;double;1';
+cnt = cnt + 1;
+footer{cnt} = 'attr;ActuatorMin;double;-1000';
+cnt = cnt + 1;
+footer{cnt} = 'attr;ActuatorMax;double;1000';
+cnt = cnt + 1;
+footer{cnt} = 'attr;ActuatorSet;double;0';
+
+% permanent stored attributes
+for seq=1:num_sequences
+    cnt = cnt + 1;
+    footer{cnt} = sprintf('attr;Val%d;double;0',seq);
+end
+
+cnt = cnt + 1;
+footer{cnt} = 'attr;ActuatorStart;double;0';
+cnt = cnt + 1;
+footer{cnt} = 'attr;ActuatorBest;double;0';
+cnt = cnt + 1;
+footer{cnt} = 'attr;TargetBest;double;0';
+cnt = cnt + 1;
+footer{cnt} = 'attr;TargetNow;double;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
+
+% Wildcards
+% $description=
+% $devactuator_attr=
+% $devtarget_attr=
+% $devseq=
+% $sleep_step=1
+% $sleep_monitor=3
+% .........