def generate_graphs_for_spatial_statistics(main, sub, y_unit):
    ''' Takes the name of the main header of data and the subheader,
        as well as value that goes on the y-axis, and plots.

        main
            sub
        ---------------------
        units
            Number of fields
            Coverage
        maps
            Sparsity
            Coverage
            Representation
        fields
            Area
    '''

    runs = 32
    modes = None
    # Load data from network1 network
    network1 = []
    for room_len in [1,2,3,4,5]:
        network1.append(load(runs,modes,500,room_len,main,sub))

    # Load data from network2 network
    network2 = []
    for room_len in [1,2,3]:
        network2.append(load(runs,modes,1500,room_len,main,sub))

    graph_shit(network1, network2, main.capitalize()+': '+sub, y_unit)

    # If looking at sparsity, plot expected exponential curve
    if sub == 'Sparsity':
        graph_expected_sparsity()
        plt.legend(loc='upper right')
    if main == 'units' and sub == 'Coverage':
        linereggsion(network1,network2, main,sub)
    if sub == 'Number of fields':
        linereggsion(network1,network2, main,sub)
    if sub == 'Area':
        linereggsion(network1,network2, main,sub)
def regr(with_bounds):
    """ 'load' returns data of the form {side_len1: [num_flds,...],
                                         side_len2: [num_flds,...],
                                         ...
                                         }
    Note that lambduh_bounds are the errors relative to lambduh. For example,
    if lambduh_bounds = [[1,...], [2,...]] and lambduhs[0] = 7, then the real value
    lies in (7-1, 7+2).
    """
    global plot_bounds
    plot_bounds = with_bounds

    # Bring in the data in a nice form.
    num_flds_1 = load(side_lens=[1, 2, 2.5], subfolder='Group 1', plc_cells=500,
                     grd_cells=1000, modules=None)
    num_flds_2 = load(side_lens=[1, 2, 2.5, 3], subfolder='Group 2', plc_cells=500,
                     grd_cells=1000, modules=None)
    num_flds_3 = load(side_lens=[1, 2, 2.5], subfolder='Group 3', plc_cells=500,
                     grd_cells=1000, modules=None)
    num_flds_31 = load(side_lens=[1, 2, 3], subfolder='Group 3 no cutoff', plc_cells=500,
                     grd_cells=1000, modules=None)
    num_flds_4 = load(side_lens=[1, 2, 2.5], subfolder='Group 4', plc_cells=500,
                     grd_cells=1000, modules=0)
    num_flds_5 = load(side_lens=[1, 2, 2.5, 3], subfolder='Group 5', plc_cells=500,
                     grd_cells=1000, modules=None)

    # Calculate the lambdas from the place field data.
    lambdus_1, bounds_1, areas_1 = calc_lambduhs(num_flds_1)
    lambdus_2, bounds_2, areas_2 = calc_lambduhs(num_flds_2)
    lambdus_3, bounds_3, areas_3 = calc_lambduhs(num_flds_3)
    lambdus_31, bounds_31, areas_31 = calc_lambduhs(num_flds_31)
    lambdus_4, bounds_4, areas_4 = calc_lambduhs(num_flds_4)
    lambdus_5, bounds_5, areas_5 = calc_lambduhs(num_flds_5)

    # Graph the junks
    plt.figure('Poisson Parameter Regression')
    _graph_poisson_parameter_regression('Group 1', lambdus_1, areas_1, bounds_1, 'b')
    _graph_poisson_parameter_regression('Group 2', lambdus_2, areas_2, bounds_2, 'g')
    _graph_poisson_parameter_regression('Group 3', lambdus_3, areas_3, bounds_3, 'r')
    _graph_poisson_parameter_regression('Group 3 no cutoff', lambdus_31, areas_31, bounds_31, 'y')
    _graph_poisson_parameter_regression('Group 4', lambdus_4, areas_4, bounds_4, 'k')
    _graph_poisson_parameter_regression('Group 5', lambdus_5, areas_5, bounds_5, 'c')
    _graph_init()
    plt.show()
def graph_spatial_statistics():
    subfolder = 'Group 1'
    modes = None
    place_cells = 500
    grid_cells= 1000
    side_lens = [1, 2, 2.5, 3]
    real_curves = load(subfolder, place_cells, grid_cells, modules, side_lens)

    from figures.analysis.spatialStatistics.graphCoverage import graph_coverage
    graph_coverage()

    from figures.analysis.spatialStatistics.graphFieldArea import graph_field_area
    graph_field_area()

    from figures.analysis.spatialStatistics.graphfFieldCoverage import graph_field_coverage
    graph_field_coverage()

    from figures.analysis.spatialStatistics.graphMapCoverage import graph_map_coverage
    graph_map_coverage()

    from figures.analysis.spatialStatistics.graphNumberOfFields import graph_number_of_fields
    graph_number_of_fields()

    from figures.analysis.spatialStatistics.graphRepresentation import graph_representation
    graph_representation()

    from figures.analysis.spatialStatistics.graphRepresentation import graph_sparsity
    graph_sparsity()

    for (main, sub, y_unit) in [('units', 'Number of fields', 'Fields'),
                            ('units','Coverage', 'Proportion'),
                            ('maps', 'Sparsity', 'Proportion'),
                            ('maps', 'Coverage', 'Proportion'),
                            ('maps', 'Representation', 'Fields'),
                            ('fields','Area','Field Area (m$^2$)')]:
        generate_graphs_for_spatial_statistics(main, sub, y_unit)
def graph_poisson_fit(calc_overall_best_fit):
    real_curves = load(subfolder, place_cells, grid_cells, modes, side_lens)
    theoretical_curves = best_poisson_fit(real_curves, calc_overall_best_fit)
    plot_poisson_curves(real_curves, theoretical_curves)