diff --git a/RTX class/Segment.m b/RTX class/Segment.m
index 38c47e81aabc54c4e37b4c816de9fae54bab385c..6bfac7145a0f4eb8e4577561cbc7b38c7eae5dcd 100644
--- a/RTX class/Segment.m	
+++ b/RTX class/Segment.m	
@@ -31,42 +31,53 @@ classdef Segment
         end
     end
     methods (Static)
-        function segments = split(seg1, seg2)
-            % seg1 before seg2 (if not, then swap)
-            if seg1.posStart > seg1.posStart
-                s = seg1;
-                seg1 = seg2;
-                seg2 = s;
-            end
-            segments = [];
-            if seg1.posEnd < seg2.posStart % no overlap
-                % |---|
-                %       |---|
-                segments = [seg1, seg2];
-            elseif seg1.posEnd < seg2.posEnd
-                % |---|
-                %   |---|
-                segments = [Segment(seg1.posStart, seg2.posStart, seg1.powDens), ...
-                    Segment(seg2.posStart, seg1.posEnd, seg1.powDens + seg2.powDens), ...
-                    Segment(seg1.posEnd, seg2.posEnd, seg2.powDens)];
-            else
-                % |-------|
-                %   |---|
-                segments = [Segment(seg1.posStart, seg2.posStart, seg1.powDens), ...
-                    Segment(seg2.posStart, seg2.posEnd, seg1.powDens + seg2.powDens), ...
-                    Segment(seg2.posEnd, seg2.posEnd, seg2.powDens)];
-            end
-            % Segments that has 0 width are not needed.
-            % e.g.: |----|
-            %         |--|
-            n = 1;
-            for k = 1:size(segments,2)
-                if segments(k).posStart < segments(k).posEnd
-                    segments(n) = segments(k);
-                    n = n + 1;
-                end
-            end
-            segments = segments(1:n-1);
-        end
+%         function yes = overlap(seg1, seg2)
+%             yes = false;
+%             if seg1.posStart > seg1.posStart
+%                 s = seg1;
+%                 seg1 = seg2;
+%                 seg2 = s;
+%             end
+%             if (seg1.posEnd > seg2.posStart)
+%                 yes = true;
+%             end
+%         end
+%         function segments = split(seg1, seg2)
+%             % seg1 before seg2 (if not, then swap)
+%             if seg1.posStart > seg1.posStart
+%                 s = seg1;
+%                 seg1 = seg2;
+%                 seg2 = s;
+%             end
+%             segments = [];
+%             if seg1.posEnd < seg2.posStart % no overlap
+%                 % |---|
+%                 %       |---|
+%                 segments = [seg1, seg2];
+%             elseif seg1.posEnd < seg2.posEnd
+%                 % |---|
+%                 %   |---|
+%                 segments = [Segment(seg1.posStart, seg2.posStart, seg1.powDens), ...
+%                     Segment(seg2.posStart, seg1.posEnd, seg1.powDens + seg2.powDens), ...
+%                     Segment(seg1.posEnd, seg2.posEnd, seg2.powDens)];
+%             else
+%                 % |-------|
+%                 %   |---|
+%                 segments = [Segment(seg1.posStart, seg2.posStart, seg1.powDens), ...
+%                     Segment(seg2.posStart, seg2.posEnd, seg1.powDens + seg2.powDens), ...
+%                     Segment(seg2.posEnd, seg2.posEnd, seg2.powDens)];
+%             end
+%             % Segments that has 0 width are not needed.
+%             % e.g.: |----|
+%             %         |--|
+%             n = 1;
+%             for k = 1:size(segments,2)
+%                 if segments(k).posStart < segments(k).posEnd
+%                     segments(n) = segments(k);
+%                     n = n + 1;
+%                 end
+%             end
+%             segments = segments(1:n-1);
+%         end
     end
 end
diff --git a/RTX class/SegmentArray.m b/RTX class/SegmentArray.m
new file mode 100644
index 0000000000000000000000000000000000000000..8afc10f87035e11072617eb750efc0a745edae3c
--- /dev/null
+++ b/RTX class/SegmentArray.m	
@@ -0,0 +1,50 @@
+classdef SegmentArray < handle
+    properties
+        segs;
+    end
+    methods
+        function obj = SegmentArray()
+            obj.segs = Segment.empty();
+        end
+        function add(obj, seg)
+            if length(obj.segs) == 0
+                obj.segs(1) = seg;
+            else
+                added = false;
+                for k = 1:length(obj.segs)
+                    if (obj.segs(k).posStart > seg.posStart) || ...
+                        (obj.segs(k).posStart == seg.posStart  && ...
+                            obj.segs(k).posEnd > seg.posEnd)
+                        obj.segs = [obj.segs(1:k-1), seg, obj.segs(k:end)];
+                        added = true;
+                        break;
+                    end
+                end
+                if ~added
+                    obj.segs = [obj.segs(1:end) seg];
+                end
+            end
+        end
+        function remove(obj, idx)
+            obj.segs = [obj.segs(1:idx-1) obj.segs(idx + 1:end)];
+        end
+        function sort(obj)
+            [~, ind] = sort([obj.segs.posStart]);
+            obj.segs = obj.segs(ind);
+        end
+        function newSegments = doTheThing2(obj)
+            newArray = unique(sort([obj.segs.posStart, obj.segs.posEnd]));
+            powDens = zeros(size(newArray));
+            newSegments = SegmentArray();
+            for k = 1:length(newArray)-1
+                idx = find([obj.segs.posStart]<=newArray(k) & [obj.segs.posEnd]>=newArray(k+1));
+                dens = [obj.segs.powDens];
+                powDens(k) = sum(dens(idx));
+                newSegments.add(Segment(newArray(k), newArray(k+1), powDens(k)));
+            end
+        end
+        function plot(obj)
+            
+        end
+    end
+end
\ No newline at end of file
diff --git a/RTX class/testSegmentArray.m b/RTX class/testSegmentArray.m
new file mode 100644
index 0000000000000000000000000000000000000000..7c6040d78e0c864094ff975c3d08a13d07cad1cc
--- /dev/null
+++ b/RTX class/testSegmentArray.m	
@@ -0,0 +1,28 @@
+segs = SegmentArray();
+% segs.add(Segment(4, 10, 1));
+% segs.add(Segment(4, 8, 1));
+% segs.add(Segment(7, 8, 1));
+for k = 1:1000
+   segs.add(Segment(randi(200),randi(200),randi(20)));
+end
+y = [1:length(segs.segs); 1:length(segs.segs)];
+y = y(:)';
+figure(1);
+plot(0,0);
+hold on;
+dens = [segs.segs.powDens];
+L = strsplit(sprintf('%.1f\n', dens(:)), '\n');
+for k = 1:length(segs.segs)
+    plot([segs.segs(k).posStart, segs.segs(k).posEnd], [k+0.5 k+0.5], 'r');
+    text(segs.segs(k).posStart, k+0.5, L(k));
+end
+segs1 = segs;
+% segs.doTheThing();
+segs = segs.doTheThing2();
+dens = [segs.segs.powDens];
+L = strsplit(sprintf('%.1f\n', dens(:)), '\n');
+for k = 1:length(segs.segs)
+    plot([segs.segs(k).posStart, segs.segs(k).posEnd], [k k], 'b');
+    text(segs.segs(k).posStart, k, L(k));
+end
+hold off;
\ No newline at end of file