Beispiel #1
0
def read_casu_logs(config_data, experiment_folder):
    list_casu_numbers = config_data['controllers']['domset']['casus']
    result = {
        a_casu_number: casu_log.CASU_Log(a_casu_number, experiment_folder)
        for a_casu_number in list_casu_numbers
    }
    return result
Beispiel #2
0
def process_arena (output_path, config_filename, bee_visitation_writer, experiment_duration, casu_A_number, casu_B_number):
    casu_numbers = [min (casu_A_number, casu_B_number), max (casu_A_number, casu_B_number)]
    base_path = os.path.dirname (config_filename)
    # read logs
    casu_logs = {
        a_casu_number : casu_log.CASU_Log (
            a_casu_number,
            os.path.join (base_path, 'data_infrared-test/beearena/')
        )
        for a_casu_number in casu_numbers
    }
    zero_time = numpy.mean ([
        a_casu_log.led_actuator [0, 0]
        for a_casu_log in casu_logs.values ()
    ])
    # compute infrared data
    build_bee_visitation_CSV_file (
        bee_visitation_writer = bee_visitation_writer,
        experiment_duration = experiment_duration,
        casu_numbers = casu_numbers,
        casu_logs = casu_logs,
        zero_time = zero_time,
    )
    # create plot
    plot_arena (
        output_path = output_path,
        config_filename = config_filename,
        experiment_duration = experiment_duration,
        casu_numbers = casu_numbers,
        casu_logs = casu_logs,
        zero_time = zero_time,
        )
def read_casu_logs(config_data, experiment_folder):
    list_casu_numbers = [
        a_casu_number for an_arena in config_data['arenas']
        for a_casu_number in an_arena.itervalues()
    ]
    result = {
        a_casu_number: casu_log.CASU_Log(
            a_casu_number,
            os.path.join(experiment_folder, 'data_infrared-test/beearena/'))
        for a_casu_number in list_casu_numbers
    }
    return result
Beispiel #4
0
    def __init__ (self, csv_row, same_colour_threshold, delta_frame):
        config_filename = csv_row [0]
        experiment_folder = os.path.dirname (config_filename)
        self.graph_name = csv_row [1]
        self.graph_layout = csv_row [2]
        self.run_number = int (csv_row [3])
        with open (config_filename, 'r') as fd:
            self.config_data = yaml.safe_load (fd)
        self.list_casu_numbers = [
            a_casu
            for an_arena in self.config_data ['arenas']
            for a_casu in an_arena.itervalues ()]
        self.list_casu_numbers.sort ()
        self.casu_video_data_column = dict ([
            (a_casu, index)
            for index, a_casu in enumerate (self.list_casu_numbers)])
#        self.video_data = None
#        self.casu_logs = None

 #   def load_data (self, same_colour_threshold, delta_frame):
        # initialise video data features
        self.video_data = read_video_data (experiment_folder, same_colour_threshold = same_colour_threshold, delta_frame = delta_frame)
        # initialise casu log
        self.casu_logs = {
            a_casu_number : casu_log.CASU_Log (
                a_casu_number,
                os.path.join (
                    experiment_folder,
                    'data_infrared-test/beearena/'
                )
            )
            for a_casu_number in self.list_casu_numbers
        }
        for a_casu_log in self.casu_logs.values ():
            a_casu_log.compute_activity (
                start_index = 0,
                end_index = 50,
                offset = 500,
                moving_average_length = 61,
                )
def process_arena (
        run_number, base_path,
        core_casu_number, leaf_casu_number,
        first_period_length, airflow_period_length, third_period_length,
        moving_average_length,
        sampling_length, sampling_delta, bee_where_about_writer):
    # read logs
    casu_logs = {
        a_casu_number : casu_log.CASU_Log (a_casu_number, os.path.join (base_path, 'data_airflow-test/beearena/'))
        for a_casu_number in [core_casu_number, leaf_casu_number]
    }
    casu_domset_logs = {
        a_casu_number : casu_domset_log.CASU_DOMSET_Log (a_casu_number, os.path.join (base_path, 'data_airflow-test/beearena/'))
        for a_casu_number in [core_casu_number, leaf_casu_number]
    }
    # compute activity (needed by bee where about)
    for a_casu_log in casu_logs.values ():
        a_casu_log.compute_activity (
            start_index = 0,
            end_index = 50,
            offset = 500,
            moving_average_length = moving_average_length
        )
    # create plot
    plot_arena (
        run_number, core_casu_number, leaf_casu_number,
        first_period_length, airflow_period_length, third_period_length,
        casu_logs, casu_domset_logs
    )
    #
    compute_bee_where_about (
        run_number,
        casu_logs,
        first_period_length,
        airflow_period_length,
        third_period_length,
        sampling_length = sampling_length,
        sampling_delta = sampling_delta,
        writer = bee_where_about_writer)
Beispiel #6
0
def process_arena(run_number, core_casu_number, leaf_casu_number, base_path,
                  moving_average_length, first_period_length,
                  third_period_length, sampling_length, sampling_delta,
                  bee_where_about_writer):
    # read logs
    casu_logs = [
        casu_log.CASU_Log(
            a_casu_number,
            os.path.join(base_path, 'data_airflow-test/beearena/'))
        for a_casu_number in [core_casu_number, leaf_casu_number]
    ]
    for a_casu_log in casu_logs:
        a_casu_log.compute_activity(
            start_index=0,
            end_index=50,
            offset=500,
            moving_average_length=moving_average_length)
    plot_arena(run_number, core_casu_number, leaf_casu_number, casu_logs)
    core_casu_log, leaf_casu_log = casu_logs
    compute_bee_where_about(run_number, casu_logs, core_casu_log,
                            first_period_length, third_period_length,
                            sampling_length, sampling_delta,
                            bee_where_about_writer)
Beispiel #7
0
def plot_arena (run_number, core_casu_number, leaf_casu_number, base_path):
    print ('[I] Creating plot for arena with core casu {} and leaf casu'.format (core_casu_number, leaf_casu_number))
    casu_numbers = [core_casu_number, leaf_casu_number]
    casu_labels = ['core', 'leaf']
    # read logs
    casu_logs = [
        casu_log.CASU_Log (a_casu_number, os.path.join (base_path, 'data_airflow-test/beearena/'))
        for a_casu_number in casu_numbers
    ]
    core_casu_log, leaf_casu_log = casu_logs
    casu_domset_logs = [
        casu_domset_log.CASU_DOMSET_Log (a_casu_number, os.path.join (base_path, 'data_airflow-test/beearena/'))
        for a_casu_number in casu_numbers
    ]
    all_logs = casu_logs + casu_domset_logs
    number_axes = 3
    # create the figure
    margin_left, margin_right, margin_top, margin_bottom = 0.7, 0.1, 0.5, 0.4
    inter_axes_distance = 0.2
    axes_width, axes_height = 6, 1.8
    figure_width = margin_left + axes_width + margin_right
    figure_height = margin_top + number_axes * axes_height + (number_axes - 1) * inter_axes_distance + margin_bottom
    figure = matplotlib.pyplot.figure (figsize = (figure_width, figure_height))
    # create the axes
    list_axes = [
        figure.add_axes ([
            margin_left / figure_width,
            (margin_bottom + index * (axes_height + inter_axes_distance)) / figure_height,
            axes_width / figure_width,
            axes_height / figure_height])
        for index in range (number_axes)]
    axes_temperature, axes_ir_raw, axes_activity = list_axes
    # setup axes
    axes_temperature.set_ylim (26, 38)
    axes_ir_raw.set_ylim (0, 30000)
    axes_activity.set_ylim (0, 1)
    min_time = min ([a_casu_log.min_time () for a_casu_log in all_logs])
    max_time = min ([a_casu_log.max_time () for a_casu_log in all_logs])
    axes_temperature.set_xlabel ('time (m:ss)', fontsize = 7)
    axes_temperature.set_ylabel (u'temperature (℃)', fontsize = 7)
    axes_ir_raw.set_ylabel ('infrared (a.u.)', fontsize = 7)
    axes_activity.set_ylabel ('sensor activity (a.u.)', fontsize = 7)
    for axa in list_axes:
        axa.set_xlim (min_time, max_time)
        ts = [t for t in range (int (min_time), int (max_time), 60)]
        axa.set_xticks (ts)
        axa.set_xticklabels ([datetime.datetime.fromtimestamp (t - ts [0]).strftime ('%M:%S') for t in ts])
        for ata in [axa.xaxis, axa.yaxis]:
            for tick in ata.get_major_ticks ():
                tick.label.set_fontsize (7)
    # figure properties
    figure.suptitle ('airflow test 2\nrun #{} core casu {} leaf casu {}'.format (run_number, core_casu_number, leaf_casu_number))
    figure.legend (
        handles = [
            matplotlib.lines.Line2D (
                xdata = [0, 1],
                ydata = [1, 0],
                linestyle = 'solid',
                color = c)
            for c in plot_common.COLOURS
        ],
        labels = ['{}{}'.format (l, n) for l, n in zip (casu_labels, casu_numbers)],
        loc = 'upper right',
        fontsize = 7
    )
    # plot
    casu_log_axes_dict = {
        casu_log.IR_RAW : [axes_ir_raw],
        casu_log.TEMP : [axes_temperature],
        casu_log.AIRFLOW : [axes_ir_raw, axes_temperature],
        casu_log.LED : [axes_ir_raw],
    }
    for index, a_casu_log in enumerate (casu_logs):
        a_casu_log.plot (
            index,
            casu_log_axes_dict,
            ir_raw_avg = True,
            avg_temp = False,
            temp_field = [assisipy.casu.TEMP_WAX]
        )
    casu_domset_log_axes_dict = {
        casu_domset_log.CAS : [axes_activity],
        casu_domset_log.CAC : [axes_activity],
        casu_domset_log.NAC : [axes_activity],
        casu_domset_log.CT : [axes_temperature],
        casu_domset_log.NT : [axes_temperature],
        casu_domset_log.CAF : [axes_activity],
    }
    for index, a_casu_domset_log in enumerate (casu_domset_logs):
        a_casu_domset_log.plot (
            index,
            casu_domset_log_axes_dict,
            avg_active_sensors = True
        )
    # final properties
    for axa in list_axes:
        axa.legend (
            fontsize = 5
        )
    # save figure
    figure.savefig ('casu-log_R{}-C{}-L{}.png'.format (run_number, core_casu_number, leaf_casu_number))
    matplotlib.pyplot.close (figure)