diff --git a/CoLo-AT/Documentation/Debug Report 7-15-2019 Sagar Doshi.pdf b/CoLo-AT/Documentation/Debug Report 7-21-2019 Sagar Doshi.pdf
similarity index 82%
rename from CoLo-AT/Documentation/Debug Report 7-15-2019 Sagar Doshi.pdf
rename to CoLo-AT/Documentation/Debug Report 7-21-2019 Sagar Doshi.pdf
index 50cb314bcfb8fa791f3fcb1e6a70ea08a1ba719f..9257899941d70d2a17bdd20281882bafcbe46bb1 100644
Binary files a/CoLo-AT/Documentation/Debug Report 7-15-2019 Sagar Doshi.pdf and b/CoLo-AT/Documentation/Debug Report 7-21-2019 Sagar Doshi.pdf differ
diff --git a/CoLo-AT/Documentation/test_simulation_sagar.py b/CoLo-AT/Documentation/test_simulation_sagar.py
deleted file mode 100644
index a51a984a8b136d97ea7e69b2cb83d3fe4430563d..0000000000000000000000000000000000000000
--- a/CoLo-AT/Documentation/test_simulation_sagar.py
+++ /dev/null
@@ -1,185 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-"""
-Created on Apr 17 2019
-
-@author: Sagar
-"""
-
-# Import necessary Libraries
-import os, sys
-import numpy as np
-from math import pi, sqrt
-
-# Import other Colo-AT Modules
-from dataset_manager.realworld_dataset_manager import RW_Dataset_Manager
-from dataset_manager.simulated_dataset_manager import SimulatedDataSetManager
-from simulation_process.sim_manager import  SimulationManager
-from robots.robot_system import RobotSystem
-from simulation_process.state_recorder import StatesRecorder
-from data_analysis.data_analyzer import Analyzer
-from data_analysis.realtime_plot import animate_plot
-
-# Import Localization Algorithms
-sys.path.append(os.path.join(os.path.dirname(__file__), "localization_algos"))
-
-# LS -> centralized system.
-from centralized_ekf import Centralized_EKF
-from ekf_ls_bda import EKF_LS_BDA
-from ekf_ls_ci import EKF_LS_CI
-# GS -> distributed system
-from ekf_gs_bound import EKF_GS_BOUND
-from ekf_gs_ci2 import EKF_GS_CI2
-from ekf_gs_sci2 import EKF_GS_SCI2
-
-
-# Template code for running/debugging simulated data
-
-# Set a random seed for replication
-np.random.seed(1)
-
-# Initialize landmark map, landmark IDs must be larger than 5
-# Format {LandmarkID: [x,y]}
-landmarks = {11: [1,0], 12: [0,1], 13: [-1,0], 14: [0,-1]}
-
-# Initalize Robots, can be 1-5
-robot_labels = [1,2,3]
-
-# Specify simulation parameters:
-# Units are [m], [s], and [rad]
-duration = 120
-delta_t = 0.2
-
-v_noise = 0.05
-w_noise = 0.0001
-r_noise = 0.05 
-phi_noise = sqrt(2)*pi/180
-fov = 2*pi
-
-v = 0.1
-sigma_v = 0.0
-
-# Instantiate Simulated Dataset Manager
-testing_dataset = SimulatedDataSetManager('name', landmarks, duration, robot_labels, 
-velocity_noise=v_noise, angular_velocity_noise=w_noise, measurement_range_noise=r_noise, bearing_noise=phi_noise,
-robot_fov=fov, delta_t=delta_t)
-
-# Generate the data
-start_time, starting_states, dataset_data, time_arr = testing_dataset.simulate_dataset('random', test=True, velocity=v, velocity_spread=sqrt(sigma_v))
-
-# Create Data Analyzer
-analyzer = Analyzer('analyzer', robot_labels)
-
-# Specify Loc Algo and create RobotSystem
-loc_algo =  Centralized_EKF('Centralized_EKF')
-robot = RobotSystem('robot', robot_labels, loc_algo, distr_sys = False)
-
-# Create the simulation manager and state recorder
-sim = SimulationManager('sim')
-state_recorder = StatesRecorder('Centralized_EKF', robot_labels)
-
-# Run the simulation
-end_time = sim.sim_process_native(robot_labels, testing_dataset, robot, state_recorder, simple_plot = True, comm=False, simulated_comm = False)
-
-# Analyze the data
-loc_err_per_run, state_err_per_run, trace_per_run, time_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder, plot_graphs = False)
-
-# View an animated display of robot movement and loc algo performance
-animate_plot(robot_labels, state_recorder, analyzer, testing_dataset.get_landmark_map())
-
-
-
-
-'''
-# Input: loc1=[x1,y1], loc2=[x2,y2]
-# Output: Euclidean distance between two points
-def calc_distance(loc1, loc2):
-
-    x1 = loc1[0]
-    y1 = loc1[1]
-
-    x2 = loc2[0]
-    y2 = loc2[1]
-
-    distance = sqrt((x1-x2)**2 + (y1-y2)**2)
-    return distance
-
-np.random.seed(1)
-
-# landmark IDs must be bigger than 5
-# landmarks = {11: [120,2]}
-landmarks = {11: [0,-1], 12: [1,0], 13: [1,1], 14: [0,1]}
-# landmarks = {11: [1,0], 12: [0,1], 13: [-1,0], 14: [0,-1]}
-
-robot_labels = [1]
-duration = 120
-
-delta_t = 0.2
-
-# NOTE - for documentation: you need at least 3 robots to run communication
-
-
-testing_dataset = SimulatedDataSetManager('testing', landmarks, duration, robot_labels, 
-velocity_noise=.05, angular_velocity_noise=0.00001, measurement_range_noise=.05, bearing_noise=sqrt(2) *pi/180
-,robot_fov=2*pi, delta_t=delta_t)
-
-start_time, starting_states, dataset_data, time_arr = testing_dataset.simulate_dataset('circle', test=False, 
-velocity=.1, velocity_spread=0.0)
-
-analyzer = Analyzer('analyzer', robot_labels)
-
-loc_algo =  Centralized_EKF('Centralized_EKF')
-robot = RobotSystem('robot', robot_labels, loc_algo, distr_sys = False)
-
-sim = SimulationManager('sim')
-state_recorder = StatesRecorder('Centralized_EKF', robot_labels)
-
-end_time = sim.sim_process_native(robot_labels, testing_dataset, robot, state_recorder, simple_plot = True, comm=False, simulated_comm = False)
-
-loc_err_per_run, state_err_per_run, trace_per_run, time_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder, plot_graphs = False)
-
-# animate_plot(robot_labels, state_recorder, analyzer, testing_dataset.get_landmark_map())
-'''
-
-
-'''
-# Real-World DataSet
-# dataset_path = "D:/LEMUR/CoLo/CoLo-D/CoLo-Datasets/official_dataset1/"
-# testing_dataset = RW_Dataset_Manager('testing')
-# start_time, starting_states, dataset_data, time_arr = testing_dataset.load_datasets(dataset_path, robot_labels, duration,delay_start=20)
-
-# Investigation of RMS/trace corresponding to meas_range
-x_diffs = diffs['x_diff']
-y_diffs = diffs['y_diff']
-
-times = np.arange(0, 120, delta_t)
-
-x_diffs = list(filter(lambda a: a != -1, x_diffs))
-x_diffs = [np.asscalar(x) for x in x_diffs]
-y_diffs = list(filter(lambda a: a != -1, y_diffs))
-y_diffs = [np.asscalar(y) for y in y_diffs]
-
-robot_x = [gt['x_pos'] for gt in dataset_data['groundtruth'][0]]
-robot_y = [gt['y_pos'] for gt in dataset_data['groundtruth'][0]]
-
-robot_locs = [ [robot_x[i], robot_y[i] ] for i in range(0, len(robot_x))]
-distances = [calc_distance(landmarks[11], robot_loc) for robot_loc in robot_locs]
-
-
-fig = plt.figure(2)
-
-plt.plot(times, x_diffs, times, y_diffs)
-
-plt.xlabel('t [s]')
-plt.ylabel('|z-z_hat| [m]')
-
-plt.legend(['x', 'y'], loc='upper right')
-
-fig = plt.figure(3)
-
-plt.plot(times, distances)
-plt.xlabel('t [s]')
-plt.ylabel('robot distance to landmark [m]')
-
-plt.show()
-'''
\ No newline at end of file
diff --git a/CoLo-AT/test_simulation_sagar.py b/CoLo-AT/test_simulation_sagar.py
index 54e066c45dc44b78471c496b12f112de696cc6cc..c0f2b2b600f0d7d955ff4da1d1eb98c99914d344 100644
--- a/CoLo-AT/test_simulation_sagar.py
+++ b/CoLo-AT/test_simulation_sagar.py
@@ -10,9 +10,10 @@ import os, sys
 import getpass
 import IPython
 import numpy as np
-from math import pi
+from math import pi, sqrt
 from matplotlib import pyplot as plt
 from matplotlib import animation
+import IPython
 
 # sys.path.append(os.path.join(os.path.dirname(__file__), "."))
 from dataset_manager.realworld_dataset_manager import RW_Dataset_Manager
@@ -37,38 +38,155 @@ from ekf_ls_ci import EKF_LS_CI
 from ekf_gs_bound import EKF_GS_BOUND
 from ekf_gs_ci2 import EKF_GS_CI2
 
-compname = getpass.getuser()
-#dataset_path = "/home/"+ compname +"/CoLo/CoLo-D/UTIAS-Datasets/MRCLAM_Dataset3/"
+
+# Template code for running/debugging simulated data
+
+# Set a random seed for replication
+np.random.seed(1)
+
+# Initialize landmark map, landmark IDs must be larger than 5
+# Format {LandmarkID: [x,y]}
+landmarks = {11: [1,0], 12: [0,1], 13: [-1,0], 14: [0,-1]}
+
+# Initalize Robots, can be 1-5
+robot_labels = [1]
+
+# Specify simulation parameters:
+# Units are [m], [s], and [rad]
+duration = 120
+delta_t = 0.2
+
+v_noise = 0.05
+w_noise = 0.0001
+r_noise = 0.05
+phi_noise = sqrt(2)*pi/180
+fov = 2*pi
+
+v = 0.1
+sigma_v = 0.1
+
+# Instantiate Simulated Dataset Manager
+testing_dataset = SimulatedDataSetManager('name', landmarks, duration, robot_labels, 
+velocity_noise=v_noise, angular_velocity_noise=w_noise, measurement_range_noise=r_noise, bearing_noise=phi_noise,
+robot_fov=fov, delta_t=delta_t)
+
+# Generate the data
+start_time, starting_states, dataset_data, time_arr = testing_dataset.simulate_dataset('random', test=False, velocity=v, velocity_spread=sqrt(sigma_v))
+
+# Create Data Analyzer
+analyzer = Analyzer('analyzer', robot_labels)
+
+# Specify Loc Algo and create RobotSystem
+loc_algo =  EKF_GS_CI2('EKF_GS_CI2')
+robot = RobotSystem('robot', robot_labels, loc_algo, distr_sys = True)
+
+# Create the simulation manager and state recorder
+sim = SimulationManager('sim')
+state_recorder = StatesRecorder('EKF_GS_CI2', robot_labels)
+
+# Run the simulation
+end_time = sim.sim_process_native(robot_labels, testing_dataset, robot, state_recorder, simple_plot = False, comm=False, simulated_comm = False)
+
+# Analyze the data
+loc_err_per_run, state_err_per_run, trace_per_run, time_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder, plot_graphs = False)
+
+
+# View an animated display of robot movement and loc algo performance
+# animate_plot(robot_labels, state_recorder, analyzer, testing_dataset.get_landmark_map())
+
+
+
+
+'''
+# Input: loc1=[x1,y1], loc2=[x2,y2]
+# Output: Euclidean distance between two points
+def calc_distance(loc1, loc2):
+
+    x1 = loc1[0]
+    y1 = loc1[1]
+
+    x2 = loc2[0]
+    y2 = loc2[1]
+
+    distance = sqrt((x1-x2)**2 + (y1-y2)**2)
+    return distance
+
+np.random.seed(1)
 
 # landmark IDs must be bigger than 5
-landmarks = {10: [0,5] , 11: [3,3], 12: [-3,0], 13: [-3, -2] }
+# landmarks = {11: [120,2]}
+landmarks = {11: [0,-1], 12: [1,0], 13: [1,1], 14: [0,1]}
+# landmarks = {11: [1,0], 12: [0,1], 13: [-1,0], 14: [0,-1]}
+
+robot_labels = [1]
+duration = 120
+
+delta_t = 0.2
+
+# NOTE - for documentation: you need at least 3 robots to run communication
+
 
-robot_labels = [1,2]
-boundary = 5 # radius of circular map centered at 0,0
-duration = 45 # (seconds)
-# NOTE - adjust noise if need to see drastic convergence/divergence
-testing_dataset = SimulatedDataSetManager('testing', boundary, landmarks, duration, robot_labels, 
-velocity_noise=0.01, angular_velocity_noise=0.01, measurement_range_noise=0.01, bearing_noise=0.01, robot_fov=2*pi)
-start_time, starting_states, dataset_data, time_arr = testing_dataset.simulate_dataset('random', test=False)
+testing_dataset = SimulatedDataSetManager('testing', landmarks, duration, robot_labels, 
+velocity_noise=.05, angular_velocity_noise=0.00001, measurement_range_noise=.05, bearing_noise=sqrt(2) *pi/180
+,robot_fov=2*pi, delta_t=delta_t)
+
+start_time, starting_states, dataset_data, time_arr = testing_dataset.simulate_dataset('circle', test=False, 
+velocity=.1, velocity_spread=0.0)
+
+analyzer = Analyzer('analyzer', robot_labels)
+
+loc_algo =  Centralized_EKF('Centralized_EKF')
+robot = RobotSystem('robot', robot_labels, loc_algo, distr_sys = False)
+
+sim = SimulationManager('sim')
+state_recorder = StatesRecorder('Centralized_EKF', robot_labels)
 
+end_time = sim.sim_process_native(robot_labels, testing_dataset, robot, state_recorder, simple_plot = True, comm=False, simulated_comm = False)
+
+loc_err_per_run, state_err_per_run, trace_per_run, time_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder, plot_graphs = False)
+
+# animate_plot(robot_labels, state_recorder, analyzer, testing_dataset.get_landmark_map())
+'''
+
+
+'''
 # Real-World DataSet
 # dataset_path = "D:/LEMUR/CoLo/CoLo-D/CoLo-Datasets/official_dataset1/"
 # testing_dataset = RW_Dataset_Manager('testing')
 # start_time, starting_states, dataset_data, time_arr = testing_dataset.load_datasets(dataset_path, robot_labels, duration,delay_start=20)
 
-analyzer = Analyzer('analyzer', robot_labels)
+# Investigation of RMS/trace corresponding to meas_range
+x_diffs = diffs['x_diff']
+y_diffs = diffs['y_diff']
 
-loc_algo =  EKF_GS_BOUND('EKF_GS_BOUND')
-robot = RobotSystem('robot', robot_labels, loc_algo, distr_sys = True)
+times = np.arange(0, 120, delta_t)
 
-sim = SimulationManager('sim')
-state_recorder = StatesRecorder('EKF_GS_BOUND', robot_labels)
+x_diffs = list(filter(lambda a: a != -1, x_diffs))
+x_diffs = [np.asscalar(x) for x in x_diffs]
+y_diffs = list(filter(lambda a: a != -1, y_diffs))
+y_diffs = [np.asscalar(y) for y in y_diffs]
+
+robot_x = [gt['x_pos'] for gt in dataset_data['groundtruth'][0]]
+robot_y = [gt['y_pos'] for gt in dataset_data['groundtruth'][0]]
+
+robot_locs = [ [robot_x[i], robot_y[i] ] for i in range(0, len(robot_x))]
+distances = [calc_distance(landmarks[11], robot_loc) for robot_loc in robot_locs]
+
+
+fig = plt.figure(2)
+
+plt.plot(times, x_diffs, times, y_diffs)
 
-# TODO - 3 robots, but one CANNOT take measurements and must rely on communication, see if convergent.
-sim.sim_process_native(robot_labels, testing_dataset, robot, state_recorder, simple_plot = False, comm=True, simulated_comm = True)
+plt.xlabel('t [s]')
+plt.ylabel('|z-z_hat| [m]')
 
-loc_err_per_run, trace_per_run, t_arr = analyzer.calculate_loc_err_and_trace_state_variance_per_run(state_recorder, plot_graphs = False)
+plt.legend(['x', 'y'], loc='upper right')
 
-animate_plot(robot_labels, state_recorder, analyzer, testing_dataset.get_landmark_map())
+fig = plt.figure(3)
 
+plt.plot(times, distances)
+plt.xlabel('t [s]')
+plt.ylabel('robot distance to landmark [m]')
 
+plt.show()
+'''
\ No newline at end of file