Example #1
0
    def _filter_bags(self, filter_by="trial"):
        """Get relevant bags for parsing for each trial"""
        if filter_by == "trial":
            bags_dict = {1: [], 2: [], 3: []}
        elif filter_by == "participant":
            bags_dict = {}

        for root, dirs, filenames in os.walk(args.bag_path):
            for p in dirs:
                if p in ["ABORTED", "PILOTS"]:
                    continue
                try:
                    excluded_trials = set(self.exclude[p])
                except KeyError:
                    excluded_trials = set(())

                bags = list(participant_bags(args.bag_path, p))

                for i in (TRIALS - excluded_trials):
                    if filter_by == "trial":
                        bags_dict[i].append(bags[i - 1])
                    elif filter_by == "participant":
                        if p not in bags_dict.keys():
                            bags_dict[p] = []

                        bags_dict[p].append(bags[i - 1])

            break  # Dont want to loop through ABORTED or PILOT dirs

        return bags_dict
Example #2
0
def participant_to_session(path, participant, instructions):
    trials = []
    bags = participant_bags(path, participant)
    for b, instr in zip(bags, instructions):
        print('\nLoading: {} ({}: {})'.format(participant, instr,
                                              os.path.split(b.filename)[-1]))
        pairer = parse_bag(b)
        pairs = list(pairer.get_associations())
        trials.append(
            Trial(instruction=instr,
                  pairs=pairs,
                  initial_time=b.get_start_time()))
        print("Total: {} actions found with {} non-empty utterances.".format(
            len(pairs), sum([len(u) > 0 for a, u in pairs])))
    try:
        next(bags)
    except StopIteration:
        pass
    else:
        raise ValueError('Too many bag files for {} (expected {})'.format(
            participant, len(bags)))
    return Session(trials)
                                               guess_participant_id,
                                               bag_summary, parse_bag)

parser = argparse.ArgumentParser(
    "Displays the bag as a log of relevant information")
parser.add_argument('path',
                    help='path to the experiment files',
                    default=os.path.curdir)
parser.add_argument('participant', help='id of the participant')

if __name__ == "__main__":

    args = parser.parse_args()
    participant = guess_participant_id(args.path, args.participant)

    for b in participant_bags(args.path, participant):
        print('\nNew Session: {} ({})\n'.format(args.participant,
                                                b.filename.split('/')[-1]))
        print('Topics:')
        types, topics = b.get_type_and_topic_info()
        for t in topics:
            print('- {}: {} messages of type {}'.format(
                t, topics[t].message_count, topics[t].msg_type))
        bag_summary(b)
        pairer = parse_bag(b)
        print('\nAssociation:')
        pairs = list(pairer.get_associations())
        for a, u in pairs:
            print(a[0], ' | '.join([uu[0] for uu in u]))
        print("Total: {} actions found with {} non-empty utterances.".format(
            len(pairs), sum([len(u) > 0 for a, u in pairs])))
Example #4
0
    i = 0

    for m in bag.read_messages():
        if m.topic == TOPIC:
            model.predict(cntxt, m.message.utter, plot=True)

            cntxt.append(m.message.action)
            i += 1

            plt.tight_layout()

            path = os.path.join(fig_path, "sample_{}_{}".format(
                m.message.result, i))
            plt.savefig(path + ".pdf", format="pdf")
            plt.clf()


def plot_all_trials(bags):
    for i, b in enumerate(bags):
        plot_trial(i + 1, b)


args = parser.parse_args()

data_path = args.bag_path
BAGS = list(participant_bags(data_path, args.participant))
trial = args.trial

plot_all_trials(BAGS)
#plot_trial(trial, BAGS[trial])