diff --git a/RTX class/Antenna.m b/RTX class/Antenna.m
index 2b72e07524f84c8ca705d3b7f14280cbe812b1be..1afd6347a348976898e0cd3034919159b1435960 100644
--- a/RTX class/Antenna.m	
+++ b/RTX class/Antenna.m	
@@ -17,16 +17,16 @@ classdef Antenna
             for j=1:length(obj.amplitude)                
                 obj.integral(j) = sum(amplitude(1:j)*dPhi);
             end
-        end  
+        end   
         
-        function [rays, complex_amplitudes] = generateRays(obj, phi)
-            rays(size(phi, 2)) = Ray;
-            for k = 1:size(phi, 2)
-                rays(k) = Ray(obj.position, [cos(phi(k)), sin(phi(k))]);
-            end
-            complex_amplitudes = obj.get_complex_amplitudes(phi);
+        function rays = generateRays(obj, phi) %TODO
+            complexAmplitudes = obj.get_complex_amplitudes(phi);
+            rays(1) = Ray(obj.position, [cos(phi(1)), sin(phi(1))]);
+            for k = 2:size(phi, 2)
+                rays(k) = Ray(obj.position, [cos(phi(k)), sin(phi(k))], complexAmplitudes(k-1));
+            end            
         end
-
+        
         function rays = generateRaysB(obj, nRay)
             phi = linspace(0, 2*pi, length(obj.amplitude));
             randArray = rand(1, nRay);
@@ -34,7 +34,7 @@ classdef Antenna
                 minval = min(abs(obj.integral - randArray(j)*obj.integral(end))); 
                 phiIndex = find(abs(obj.integral - randArray(j)*obj.integral(end)) == minval, 1, 'last');
                 phiRay = phi(phiIndex);
-                rays(j) = Ray(obj.position, [cos(phiRay), sin(phiRay)], obj.phase(phiIndex));
+                rays(j) = Ray(obj.position, [cos(phiRay), sin(phiRay)], exp(1i*obj.phase(phiIndex)));
             end
         end
         
@@ -47,6 +47,7 @@ classdef Antenna
             plot(obj.position.x, obj.position.y, 'kO', 'MarkerSize', 10);
         end
     end
+    
     methods(Access = protected)
         function complex_amplitudes = get_complex_amplitudes(obj, phi)
             n = size(phi, 2);
@@ -77,3 +78,4 @@ classdef Antenna
         end
     end
 end
+
diff --git a/RTX class/BalazsAperture.m b/RTX class/BalazsAperture.m
index 6c08f79145b357530a32b1b7a800fb664e23fee5..28dc8245558ad1b8fa2dcab9211fdca4fc97fbf6 100644
--- a/RTX class/BalazsAperture.m	
+++ b/RTX class/BalazsAperture.m	
@@ -35,7 +35,7 @@ classdef BalazsAperture < Barrier
         function post_collide(obj, col, trace)
             if (col.collided) %change from original
                 i = floor(obj.nslice*(col.pos.y-obj.center.y+obj.size/2)/obj.size) + 1;
-                phase = trace.init_phase + 2*pi * mod(trace.length, trace.wavelength)/trace.wavelength;
+                phase = angle(trace.complexAmplitude) + 2*pi * mod(trace.length, trace.wavelength)/trace.wavelength;
                 obj.collisions(i) = obj.collisions(i) + exp(1i*phase);
             end
         end
diff --git a/RTX class/Ray.m b/RTX class/Ray.m
index ced16c0d423a1497af364e2a72eac25977923e5e..bffb5f778fe20ca9e37bf6a3c62f11caa6a9bc9a 100644
--- a/RTX class/Ray.m	
+++ b/RTX class/Ray.m	
@@ -2,14 +2,14 @@ classdef Ray
     properties
         start Vect = Vect;
         dir Vect = Vect;
-        initPhase = 0;
+        complexAmplitude = 0;
     end
     methods
-        function obj = Ray(start, dir, initPhase)            
+        function obj = Ray(start, dir, complexAmplitude)            
             obj.start = start;
             obj.dir = dir;
             if nargin == 3
-                obj.initPhase = initPhase;
+                obj.complexAmplitude = complexAmplitude;
             end
         end
     end
diff --git a/RTX class/Segment.m b/RTX class/Segment.m
index b75c205d5af1ba71ba0548ab694b2c0e7f29d52d..38c47e81aabc54c4e37b4c816de9fae54bab385c 100644
--- a/RTX class/Segment.m	
+++ b/RTX class/Segment.m	
@@ -69,4 +69,4 @@ classdef Segment
             segments = segments(1:n-1);
         end
     end
-end
\ No newline at end of file
+end
diff --git a/RTX class/SegmentedAperture.m b/RTX class/SegmentedAperture.m
new file mode 100644
index 0000000000000000000000000000000000000000..10cb7a057d6c161e750177192af44f8e42f791e7
--- /dev/null
+++ b/RTX class/SegmentedAperture.m	
@@ -0,0 +1,48 @@
+classdef SegmentedAperture < Barrier
+    properties
+        center Vect = Vect; % center position
+        size double = 0; % full size of reflector (end to end)
+        color = [0.5 0.5 0.5];
+        width = 2;
+        segments Segment;
+        prevTrace = Trace(Inf, Ray([0 0],[0 0], 0), 0, [], 0); 
+        prevCol;
+    end
+    methods
+        function obj = SegmentedAperture(center, size)
+            if nargin == 2
+                obj.center = center;
+                obj.size = size;
+            end
+        end
+        
+        function col = collide(obj, ray) % override this function with custom collision
+            col = Collision;
+            col.stop = true;
+            
+            k = (obj.center.x - ray.start.x)/ray.dir.x;
+            col.pos = ray.start + k*ray.dir;
+            col.reflDir = Vect(-ray.dir.x, ray.dir.y);
+            if abs(col.pos.y - obj.center.y) < obj.size/2 && k*ray.dir.mag > 1e-6
+                col.collided = true;
+            else
+                col.collided = false;
+            end
+        end
+        
+        function post_collide(obj, col, trace)
+            if trace.id == obj.prevTrace.id+1 && abs(trace.complexAmplitude) > 0
+                segmentSize = abs(obj.prevCol.pos.y - col.pos.y);
+                obj.segments(end+1) = Segment(obj.prevCol.pos.y, col.pos.y, abs(trace.complexAmplitude)/segmentSize);
+            end
+            obj.prevTrace = trace;
+            obj.prevCol = col;                
+        end
+        
+        function plot_self(obj)
+            plot([obj.center.x obj.center.x],...
+                [obj.center.y - obj.size/2, obj.center.y + obj.size/2],...
+                'LineWidth', obj.width, 'Color', obj.color);
+        end
+    end
+end
diff --git a/RTX class/Trace.m b/RTX class/Trace.m
index e1442eb729f93d10453ae146c0a8605344c872df..e6f12d4fd9e8b4d63e5c9d7b44bb5cf8103828e0 100644
--- a/RTX class/Trace.m	
+++ b/RTX class/Trace.m	
@@ -5,15 +5,15 @@ classdef Trace < handle
         wavelength;
         rays Ray;
         length = +inf;
-        init_phase = 0;
-        
+        complexAmplitude = 0;
+             
     end
     
     methods
-        function obj = Trace(id, init_ray, wavelength, barriers, maxCol)
+        function obj = Trace(id, initRay, wavelength, barriers, maxCol)
             obj.id = id;
-            obj.rays(1) = init_ray;
-            obj.init_phase = init_ray.initPhase;
+            obj.rays(1) = initRay;
+            obj.complexAmplitude = initRay.complexAmplitude;
             obj.wavelength = wavelength;
             
             ncol = 0;
@@ -25,7 +25,7 @@ classdef Trace < handle
                 for k = 1:size(barriers,2)
                     c = barriers(k).collide(obj.rays(ncol+1)); % get collision from the 'k'th barrier
                     if (c.collided)
-                        d = Vect.abs(c.pos - init_ray.start);
+                        d = Vect.abs(c.pos - initRay.start);
                         if d < dist
                             dist = d;
                             col = c;
@@ -56,9 +56,9 @@ classdef Trace < handle
             length = obj.length;
         end
 
-        function plot_trace(obj, stop, color, linewidth)
+        function plot_trace(obj, stop, color, lineWidth)
             if nargin < 4
-                linewidth = 1;
+                lineWidth = 1;
             end
             if nargin < 3
                 color = 'r';                
@@ -73,7 +73,9 @@ classdef Trace < handle
                 x(k) = obj.rays(k).start.x;
                 y(k) = obj.rays(k).start.y;
             end
-            plot(x, y, 'Color', color, 'LineWidth', linewidth);
+            plot(x, y, 'Color', color, 'LineWidth', lineWidth);
         end
     end
 end
+
+
diff --git a/RTX class/segment_test.m b/RTX class/segment_test.m
new file mode 100644
index 0000000000000000000000000000000000000000..1d3ae688220fb540cb2df94a055fd06c0e45cfc8
--- /dev/null
+++ b/RTX class/segment_test.m	
@@ -0,0 +1,43 @@
+clear
+close all
+
+progressBar1 = waitbar(0,'Generating rays...','Name','Tracing rays...',...
+    'CreateCancelBtn','setappdata(gcbf,''canceling'',1)');
+setappdata(progressBar1,'canceling',0);
+
+
+
+reflectors = PlaneReflector.empty;
+reflectors(end+1) = PlaneReflector([2 0], 2);
+reflectors(end+1) = ParabolaReflector([0 0], 4, 3);
+reflectors(end+1) = SegmentedAperture([3 0], 20);
+
+n = 100;
+wavelength = 3e8/1e9;
+stepSize = n/100;
+
+antenna = Antenna(Vect(1,0), [ones(1,125), zeros(1,750), ones(1,125)], zeros(1,1000));
+rays = antenna.generateRays(linspace(0,2*pi,n));
+
+figure(1);
+plot(0, 0);
+xlim([0 4]);
+ylim([-4 4]);
+hold on;
+antenna.plot_antenna();
+for k = 1:size(reflectors, 2)
+    reflectors(k).plot_self;
+end
+
+for k = 1:size(rays, 2) 
+    if getappdata(progressBar1,'canceling') 
+        break; 
+    end
+    if mod(k, stepSize) == 0 
+        waitbar(k/n,progressBar1,sprintf('Tracing rays... [%0.1f%%]',k/n*100)); 
+    end
+    traces(k) = Trace(k, rays(k), wavelength, reflectors, 5);
+    traces(k).plot_trace(4);
+end
+delete(progressBar1)
+hold off;