diff --git a/RTX class/Antenna.m b/RTX class/Antenna.m
index 94f8017fcc71660adda1d4fa5d1baecca13cb708..c69390ec8374a8e6dd6fe7f90beecdc99c32f9a2 100644
--- a/RTX class/Antenna.m	
+++ b/RTX class/Antenna.m	
@@ -21,6 +21,17 @@ classdef Antenna
             end
             complex_amplitudes = obj.get_complex_amplitudes(phi);
         end
+
+        function rays = generateRaysB(obj, nRay)
+            phi = linspace(0, 2*pi, length(obj.amplitude));
+            randArray = rand(1, nRay);
+            for j=1:nRay
+                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));
+            end
+        end
         
         function plot_characteristics(obj)
             phi = linspace(0,2*pi,1000);
diff --git a/RTX class/Ray.m b/RTX class/Ray.m
index df985ce10b8154f16cb82afa26a8ba8eac0d4b42..ced16c0d423a1497af364e2a72eac25977923e5e 100644
--- a/RTX class/Ray.m	
+++ b/RTX class/Ray.m	
@@ -2,12 +2,14 @@ classdef Ray
     properties
         start Vect = Vect;
         dir Vect = Vect;
+        initPhase = 0;
     end
     methods
-        function obj = Ray(start, dir)
-            if nargin == 2 %constructor from 2 vectors
-                obj.start = start;
-                obj.dir = dir;
+        function obj = Ray(start, dir, initPhase)            
+            obj.start = start;
+            obj.dir = dir;
+            if nargin == 3
+                obj.initPhase = initPhase;
             end
         end
     end
diff --git a/RTX class/Trace.m b/RTX class/Trace.m
index f9e493c0b8960310f210e36cb5baefe9408ca9b4..78371276182ec2894fc8435725b534c48936a9d3 100644
--- a/RTX class/Trace.m	
+++ b/RTX class/Trace.m	
@@ -10,10 +10,10 @@ classdef Trace < handle
     end
     
     methods
-        function obj = Trace(id, init_ray, init_phase, wavelength, barriers, maxCol)
+        function obj = Trace(id, init_ray, wavelength, barriers, maxCol)
             obj.id = id;
             obj.rays(1) = init_ray;
-            obj.init_phase = init_phase;
+            obj.init_phase = init_ray.initPhase;
             obj.wavelength = wavelength;
             
             ncol = 0;
@@ -56,16 +56,20 @@ classdef Trace < handle
             length = obj.length;
         end
 
-        function plot_trace(obj, color, linewidth)
-            if nargin < 3
+        function plot_trace(obj, stop, color, linewidth)
+            if nargin < 4
                 linewidth = 1;
             end
+            if nargin < 3
+                color = 'r';                
+            end
             if nargin < 2
-                color = 'r';
+                stop = size(obj.rays,2);                
             end
-            x = zeros(1,size(obj.rays, 2));
-            y = zeros(1,size(obj.rays, 2));
-            for k = 1:size(obj.rays,2)
+            stop = min([stop size(obj.rays,2)]);
+            x = zeros(1,stop);
+            y = zeros(1,stop);
+            for k = 1:stop
                 x(k) = obj.rays(k).start.x;
                 y(k) = obj.rays(k).start.y;
             end
diff --git a/RTX class/simclass_test.m b/RTX class/simclass_test.m
index 83781d8d67981af35fb552337498ac4d59f77306..76a1c659c585bb71c993f7106f45708b91e8cbae 100644
--- a/RTX class/simclass_test.m	
+++ b/RTX class/simclass_test.m	
@@ -1,3 +1,4 @@
+clear
 reflectors = PlaneReflector.empty;
 reflectors(end+1) = PlaneReflector([2 0], 2);
 reflectors(end+1) = ParabolaReflector([0 0], 4, 3);
@@ -5,18 +6,24 @@ reflectors(end+1) = BalazsAperture([3 0], 20, 1000);
 
 phi_start = -pi;
 phi_stop = pi;
-n = 10000;
+n = 100000;
 wavelength = 3e8/1e9;
 
-antenna = Antenna(Vect(1,0));
-[rays, complex_amplitudes] = antenna.generate_rays(linspace(phi_start, phi_stop, n));
+antenna = Antenna(Vect(1,0), [ones(1,125), zeros(1,750), ones(1,125)], zeros(1,1000));
+rays = antenna.generateRaysB(n);
+disp([num2str(n) ' rays generated!']);
 
 figure(1);
 plot(0, 0);
 hold on;
-for k = 1:size(rays, 2)
-    t = Trace(k, rays(k), 0, wavelength, reflectors, 5);
-    %t.plot_trace();
+
+for k = 1:size(rays, 2) 
+    traces(k) = Trace(k, rays(k), wavelength, reflectors, 5);
+    if mod(k, 5000) == 0
+        clc;
+        disp([num2str(k/n*100) '%']);
+    end
+    traces(k).plot_trace(3);
 end
 antenna.plot_antenna();
 for k = 1:size(reflectors, 2)