diff --git a/RTX class/FarField.m b/RTX class/FarField.m
index 3d7498b96e56bf2f4a8210119e6e729239f3c38d..07a28884c1b63c60b7371c09d95d81a2c3f0dd87 100644
--- a/RTX class/FarField.m	
+++ b/RTX class/FarField.m	
@@ -6,14 +6,18 @@ classdef FarField < handle
         wavelength;
         theta;
         nFi;
+        segArray;
     end
     
     methods
-        function obj = FarField(aperture, theta, nFi, wavelength)
+        function obj = FarField(aperture, theta, nFi, wavelength, segArray)
             obj.aperture = aperture;
             obj.wavelength = wavelength;
             obj.theta = theta;
             obj.nFi = nFi;
+            if nargin > 4
+                obj.segArray = segArray;
+            end
         end
         
         function field = calculate(obj)            
@@ -22,15 +26,29 @@ classdef FarField < handle
             setappdata(progressBar2,'canceling',0);
             nTheta = length(obj.theta);
             stepSize = nTheta/100;
+            isemp = ~isprop(obj.aperture, 'segments');
             
-            histogram = obj.aperture. getCollisionHistogram();
+            if isemp
+                hist = obj.aperture.getCollisionHistogram();
+            else
+                [hist, starts, ends] = obj.aperture.getCollisionHistogram();
+            end
             field = zeros(1, nTheta);
             fi = linspace(0, 2*pi, obj.nFi);
-            nr = floor(length(histogram)/2);
-            r = linspace(0, obj.aperture.size/2, nr);
+            nr = floor(length(hist)/2);
             c1 = (obj.aperture.size/(2*nr))*2*pi/obj.nFi;
             c2 = 1i*2*pi/obj.wavelength;
-            
+            if isemp
+                r = linspace(0, obj.aperture.size/2, nr);
+                obj.areas = r*c1;
+            else
+                first = max(find(starts > 0, 1), find(ends > 0, 1));
+                starts = starts(first:end);
+                ends = ends(first:end);
+                r = abs(starts);
+                nr = length(r);
+                c_areas = (ends - starts)*2*pi/obj.nFi;
+            end
 
             for i = 1:nTheta
                 if getappdata(progressBar2,'canceling') 
@@ -41,11 +59,15 @@ classdef FarField < handle
                 end
                 c3 = c2*sin(obj.theta(i));
                 for j = 1:nr
-                    area = r(j) * c1;
+                    if isemp
+                        area = r(j) * c1;
+                    else
+                        area = r(j) * c_areas(j);
+                    end
                     c4 = c3*r(j);
-                    ind = 2*nr-j+1;
+                    ind = length(hist)-nr+j;
                     for k = 1:obj.nFi                        
-                        field(i) = field(i) + histogram(ind)*exp(c4*sin(fi(k)))*area;                  
+                        field(i) = field(i) + hist(ind)*exp(c4*sin(fi(k)))*area;                  
                     end
                 end
             end
diff --git a/RTX class/RTX.m b/RTX class/RTX.m
index 5666fd637140dbeb324c80b19330cba8ed0c6299..bcc70b6a5f353ba78042698de9120cffab244174 100644
--- a/RTX class/RTX.m	
+++ b/RTX class/RTX.m	
@@ -36,7 +36,11 @@ classdef RTX < handle
                 'CreateCancelBtn','setappdata(gcbf,''canceling'',1)');
             setappdata(progBar,'canceling',0);
             stepSize = obj.nRay/100;
-            obj.rays = obj.antenna.generateRaysB(obj.nRay);
+            if isa(obj.aperture, 'SegmentedAperture')
+                obj.rays = obj.antenna.generateRays(linspace(0,2*pi, obj.nRay));
+            else 
+                obj.rays = obj.antenna.generateRaysB(obj.nRay);
+            end
             for j = 1:obj.nRay
                 if getappdata(progBar,'canceling') 
                     break; 
@@ -60,7 +64,11 @@ classdef RTX < handle
             if isempty(obj.traces)
                 obj.trace();
             end
-            obj.farField = FarField(obj.aperture, theta, nFi, obj.wavelength);
+            if isprop(obj.aperture, 'segments')
+                obj.farField = FarField(obj.aperture, theta, nFi, obj.wavelength, obj.aperture.segments);
+            else
+                obj.farField = FarField(obj.aperture, theta, nFi, obj.wavelength);
+            end
             field = obj.farField.calculate();
         end
         
diff --git a/RTX class/Segment.m b/RTX class/Segment.m
index 6bfac7145a0f4eb8e4577561cbc7b38c7eae5dcd..dc17e9f147ab902e26d1634e866c1a40202d58ec 100644
--- a/RTX class/Segment.m	
+++ b/RTX class/Segment.m	
@@ -2,7 +2,7 @@ classdef Segment
     properties
         posStart double = 0;
         posEnd double = 0;
-        powDens double = 0;
+        powDens;
     end
     methods
         function obj = Segment(posStart, posEnd, powDens)
diff --git a/RTX class/SegmentedAperture.m b/RTX class/SegmentedAperture.m
index 10cb7a057d6c161e750177192af44f8e42f791e7..14a61064f8d50674a7db149cce0b8e588419cc24 100644
--- a/RTX class/SegmentedAperture.m	
+++ b/RTX class/SegmentedAperture.m	
@@ -1,10 +1,6 @@
-classdef SegmentedAperture < Barrier
+classdef SegmentedAperture < Aperture
     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;
+        segments SegmentArray;
         prevTrace = Trace(Inf, Ray([0 0],[0 0], 0), 0, [], 0); 
         prevCol;
     end
@@ -14,35 +10,37 @@ classdef SegmentedAperture < Barrier
                 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
+            obj.segments = SegmentArray();
         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);
+                if length(trace.rays) == length(obj.prevTrace.rays)
+                    segmentSize = abs(obj.prevCol.pos.y - col.pos.y);
+                    obj.segments.add(Segment(obj.prevCol.pos.y, col.pos.y, ...
+                        trace.complexAmplitude/segmentSize * exp(1i*mod(trace.length, trace.wavelength))));
+                end
             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);
+        function [histogram, xStart, xStop] = getCollisionHistogram(obj)
+            obj.segments = obj.segments.doTheThing2();
+            histogram = [obj.segments.segs.powDens];
+            xStart = [obj.segments.segs.posStart];
+            xStop = [obj.segments.segs.posEnd];
+        end
+        
+        function plotApertureField(obj)
+            figure;
+            [histogram,x1, x2] = obj.getCollisionHistogram();
+            plot(0, 0);
+            hold on;
+            for k = 1:length(histogram)
+                plot([x1(k) x2(k)], [abs(histogram(k)), abs(histogram(k))],'b');
+            end
+            hold off;
         end
     end
 end
diff --git a/RTX class/Trace.m b/RTX class/Trace.m
index e6f12d4fd9e8b4d63e5c9d7b44bb5cf8103828e0..e55bd420bbeb77fb01d43466790f423071fbcfe4 100644
--- a/RTX class/Trace.m	
+++ b/RTX class/Trace.m	
@@ -66,7 +66,7 @@ classdef Trace < handle
             if nargin < 2
                 stop = size(obj.rays,2);                
             end
-            stop = min([stop size(obj.rays,2)]);
+            stop = min([stop+1 size(obj.rays,2)]);
             x = zeros(1,stop);
             y = zeros(1,stop);
             for k = 1:stop
diff --git a/RTX class/rtx_test.m b/RTX class/rtx_test.m
index 661afd23d5d9f267cb8bfa2ea3176365861ec52c..50ce76dfb116931be0ed865f59b830020e5c271f 100644
--- a/RTX class/rtx_test.m	
+++ b/RTX class/rtx_test.m	
@@ -1,11 +1,21 @@
-clear
-close all
+%clear
+%close all
 
 reflectors = [PlaneReflector([2 0], 2), ParabolaReflector([0 0], 4, 3)];
-aperture = BalazsAperture([3 0], 20, 1000);
+%reflectors = [PlaneReflector([-1 1], 0)];
+aperture = BalazsAperture([3 0], 20, 400);
+aperture2 = SegmentedAperture([3 0], 20);
 antenna = Antenna(Vect(1,0), [ones(1,125), zeros(1,750), ones(1,125)], zeros(1,1000));
+%antenna = Antenna(Vect(1,0));
 wavelength = 3e8/1e9;
-nRay = 1000;
+nRay = 10000;
+nRay2 = 1000;
 
 rtx = RTX(reflectors, aperture, antenna, wavelength, nRay);
+rtx.trace();
+rtx.plotApertureField();
 rtx.plotFarField();
+rtx2 = RTX(reflectors, aperture2, antenna, wavelength, nRay2);
+rtx2.trace();
+rtx2.plotApertureField();
+rtx2.plotFarField();
diff --git a/RTX class/segment_test.m b/RTX class/segment_test.m
index 1d3ae688220fb540cb2df94a055fd06c0e45cfc8..e8864889e3b3126820500360f7de33c67da2f62b 100644
--- a/RTX class/segment_test.m	
+++ b/RTX class/segment_test.m	
@@ -1,5 +1,5 @@
 clear
-close all
+%close all
 
 progressBar1 = waitbar(0,'Generating rays...','Name','Tracing rays...',...
     'CreateCancelBtn','setappdata(gcbf,''canceling'',1)');
@@ -8,18 +8,20 @@ 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) = PlaneReflector([2 0], 2);
+%reflectors(end+1) = ParabolaReflector([0 0], 4, 3);
 reflectors(end+1) = SegmentedAperture([3 0], 20);
 
-n = 100;
+n = 1000;
 wavelength = 3e8/1e9;
 stepSize = n/100;
 
-antenna = Antenna(Vect(1,0), [ones(1,125), zeros(1,750), ones(1,125)], zeros(1,1000));
+%antenna = Antenna(Vect(1,0), [zeros(1,125), 1, zeros(1,124), zeros(1,20), ones(1, 50), zeros(1, 180), zeros(1,500)], zeros(1,1000));
+%antenna = Antenna(Vect(1,0), [zeros(1,125), 1, zeros(1,124), zeros(1,188), ones(1,1), zeros(1,61) zeros(1,500)], zeros(1,1000));
+antenna = Antenna(Vect(1,0));
 rays = antenna.generateRays(linspace(0,2*pi,n));
 
-figure(1);
+figure(3);
 plot(0, 0);
 xlim([0 4]);
 ylim([-4 4]);
@@ -36,8 +38,24 @@ for k = 1:size(rays, 2)
     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);
+    traces(k) = Trace(k, rays(k), wavelength, reflectors, 10);
+    if abs(traces(k).complexAmplitude) > 0
+        %traces(k).plot_trace(10);
+    end
 end
 delete(progressBar1)
 hold off;
+
+figure(4);
+[histogram,x1, x2] = reflectors(end).getCollisionHistogram();
+plot(0, 0);
+hold on;
+for k = 1:length(histogram)
+    plot([x1(k) x2(k)], [abs(histogram(k)), abs(histogram(k))],'b');
+end
+hold off;
+
+%interpolate
+x = linspace(-10, 10, 1000);
+
+
diff --git a/RTX class/simclass_test.m b/RTX class/simclass_test.m
index 20c33733fd1227c1b4e4247650f0c21415cf4cc9..dd0dfbdc085c73faa9ea80dd870c5891e93a1caa 100644
--- a/RTX class/simclass_test.m	
+++ b/RTX class/simclass_test.m	
@@ -1,5 +1,5 @@
 clear
-close all
+%close all
 
 progressBar1 = waitbar(0,'Generating rays...','Name','Tracing rays...',...
     'CreateCancelBtn','setappdata(gcbf,''canceling'',1)');
diff --git a/RTX class/testSegmentArray.m b/RTX class/testSegmentArray.m
index 7c6040d78e0c864094ff975c3d08a13d07cad1cc..0570f15ef43faddb9a3e54b2261033d483bf1d67 100644
--- a/RTX class/testSegmentArray.m	
+++ b/RTX class/testSegmentArray.m	
@@ -2,7 +2,7 @@ segs = SegmentArray();
 % segs.add(Segment(4, 10, 1));
 % segs.add(Segment(4, 8, 1));
 % segs.add(Segment(7, 8, 1));
-for k = 1:1000
+for k = 1:10
    segs.add(Segment(randi(200),randi(200),randi(20)));
 end
 y = [1:length(segs.segs); 1:length(segs.segs)];