def error_over_speed(tau, ws):
    speeds = np.arange(0.1, 0.9, 0.1)
    y = []
    for s in speeds:
        tg_var = TARGET(speed=s,
                        max_speed=0.8,
                        size=20,
                        peak_cell_num=peak_cell_num)
        can = CAN(target=tg_var,
                  size=20,
                  tau=tau,
                  dt=tau / 10,
                  kappa=0.1,
                  beta=-8,
                  ws_param=ws,
                  h=0)
        can.init_network_activity(peak_cell_num=peak_cell_num, init_time=1)
        can.run(sim_time=20)
        y.append(can.slope_accuracy(s, 20, peak_cell_num))
    fig, ax = plt.subplots()
    ax.xaxis.set_ticks_position('bottom')
    ax.set_title("Error in relation to speed [Tau=" + str(tau) + "][WS=" +
                 str(ws) + "]")
    ax.set_xlabel("Speed [m/s]")
    ax.set_ylabel("Error")
    plt.plot(speeds, y, 'r-')
    plt.ylim(-20, 20)
def multiple_runs(overwrite_file):
    x = np.arange(0.01, 0.35, 0.01)  #Value range for tau
    y = np.arange(0.01, 0.51, 0.01)  #Value range for ws_param
    delta_t = x / 10

    if os.path.isfile(str(speed) +
                      '-Log.csv') == False or overwrite_file == True:
        print("No existing data file found;\nCalculating new data set..")
        mat_vals = np.empty((len(y), len(x)))
        progress = len(y) * len(x) / 100
        counter = 0

        for j in range(0, len(x)):
            for i in range(0, len(y)):
                can = CAN(target=tg,
                          size=20,
                          tau=x[j],
                          dt=delta_t[j],
                          kappa=0.1,
                          beta=-8,
                          ws_param=y[i],
                          h=0)
                can.init_network_activity(peak_cell_num=peak_cell_num,
                                          init_time=1)
                can.run(sim_time=20)
                result = can.slope_accuracy(speed, 20, peak_cell_num)
                mat_vals[i, j] = result
                counter += 1
                print(counter / progress, "%")

        np.savetxt(str(speed) + '-Log.csv', mat_vals, delimiter=',')

    else:
        print("Loading from existing data file..")
        mat_vals = np.loadtxt(str(speed) + '-Log.csv', delimiter=',')

    #print(mat_vals)
    mat_vals = np.clip(mat_vals, -100, 100)
    fig, ax = plt.subplots()
    mat = ax.matshow(mat_vals,
                     origin='lower',
                     cmap='seismic',
                     aspect='auto',
                     extent=(0.01 - 0.01 / 2, 0.34 + 0.01 / 2, 0.01 - 0.01 / 2,
                             0.5 + 0.01 / 2))
    ax.xaxis.set_ticks_position('bottom')
    ax.set_title("Error of calculated slope to expected slope for " +
                 str(speed) + " m/s")
    ax.set_xlabel("Tau [s]")
    ax.set_ylabel("Pi factor")
    ax.set_facecolor('tab:gray')
    ax.grid()
    cb = plt.colorbar(mat, ax=ax)
    cb.set_label("Error value")
def single_run():
    #tau 0.05, ws 0.08
    can = CAN(target=tg,
              size=20,
              tau=0.05,
              dt=0.005,
              kappa=0.1,
              beta=-8,
              ws_param=0.08,
              h=0)
    can.init_network_activity(peak_cell_num=peak_cell_num, init_time=1)
    can.run(sim_time=15)
    can.plot_activities(u_out=True)