def add_coupling_plots(
        report: reporting.Report,
        trials: typing.List[dict]
):
    """
    Generates coupling report data from the analyzed coupling data and the
    individual simulation trial results

    :param report:
        Grouped coupling data from the grouped simulation results
    :param trials:
        Simulation results for each trial run by the group
    """

    distribution_traces = []
    population_traces = []
    index = 0

    for trial in trials:
        trial_data = reader.trial(trial['id'], paths.results())

        index += 1
        coupling_data = trial_data['couplings']

        distribution_traces.append(dict(
            x=coupling_data['distribution_profile']['x'],
            y=coupling_data['distribution_profile']['y'],
            type='scatter',
            mode='lines',
            name='{}'.format(index)
        ))

        population_traces.append(dict(
            x=coupling_data['population'],
            type='box',
            name='{}'.format(index),
            boxpoints=False
        ))

    report.add_plotly(
        data=distribution_traces,
        layout=plotting.create_layout(
            title='Coupling Length Trial Distributions',
            x_label='Expectation Value (au)',
            y_label='Coupling Length (m)'
        )
    )

    report.add_plotly(
        data=population_traces,
        layout=plotting.create_layout(
            title='Coupling Length Trials',
            x_label='Coupling Length (m)',
            y_label='Trial Index (#)'
        )
    )
Example #2
0
def load(
        group_ids: list = None,
        trial_ids: list = None,
        row_filter: typing.Callable = None
):
    """

    :param group_ids:
    :param trial_ids:
    :param row_filter:
    :return:
    """

    if not group_ids:
        group_ids = []
    groups = [reader.group(gid) for gid in group_ids]

    if not trial_ids:
        trial_ids = []
    trials = [reader.trial(tid) for tid in trial_ids]

    for g in groups:
        trials += g['trials']

    df = []
    for trial in trials:
        df.append(to_data_entry(trial))
        trial['short_id'] = df[-1]['short_id']

    df = pd.DataFrame(df).sort_values(
        by=['coupling_length', 'gait_index', 'duty_cycle']
    )

    if row_filter is not None:
        df['keep'] = df.apply(row_filter, axis=1)
        df = df[df.keep]
        df.drop('keep', 1)

        keep_trial_ids = df['id'].tolist()
        keep_trials = []

        for trial in trials:
            if trial['id'] in keep_trial_ids:
                keep_trials.append(trial)
        trials = keep_trials

    df['order'] = np.arange(0, df.shape[0], 1)
    df['relative_uncertainty'] = df.uncertainty / df.coupling_length

    return dict(
        trials=trials,
        groups=groups,
        df=df
    )
Example #3
0
from tracksim import reader as tk_reader
import cauldron as cd

# TRIAL_ID = 'G2-walk_BEB-515-2009-1-S-21_v0_st9_et21'
TRIAL_ID = 'G2-walk_BEB-500-2014-1-S-1_v0_st9point5_et21'
# TRIAL_ID = 'G2-walk_BEB-500-2014-1-S-4_v0_full'
# TRIAL_ID = 'G2-walk2_BEB-500-2014-1-S-1_v0_st9point5_et21'

cd.shared.trial_id = TRIAL_ID
cd.shared.trial = tk_reader.trial(TRIAL_ID)