Exemple #1
0
    def save_csv(self,
                 directory=None,
                 extra_array_names=None,
                 extra_arrays=None):

        if (extra_arrays != None and extra_array_names == None):
            raise ValueError(
                "Enter a list of array names associated with 'extra_arrays'.")
        if (extra_arrays == None and extra_array_names != None):
            raise ValueError(
                "Names for 'extra_arrays' entered, but no extra arrays.")

        ##### Make variables #####
        subject = str(self.subject)
        experiment_name = str(self.experiment_name)
        start_date = str(self.start_date)
        start_time = str(self.start_time)
        end_date = str(self.end_date)
        end_time = str(self.end_time)
        session = str(self.session)
        ###########################

        self.file_name = "%s_%s_%s_%s.csv" % (start_date, start_time, subject,
                                              experiment_name)
        if directory != None:
            self.file_name = directory + self.file_name

        ##### Organise meta data and extend if needed for extra events #####
        time_event_column = ["Time", "Event"]
        if (self.extra_columns != None):
            time_event_column.append(self.extra_columns)

        meta_data = [["Start_date", start_date], ["Start_time", start_time],
                     ["End_date", end_date], ["End_time", end_time],
                     ["Subject", subject], ["Session", session],
                     ["Experiment_name", experiment_name], time_event_column]

        with open(self.file_name, "w") as file:
            writer = writer(file, delimiter=",", lineterminator="\n")
            writer.writerows(meta_data)
            writer.writerows(self.event_record)
            if extra_arrays != None:
                for array in range(len(extra_array_names)):
                    writer.writerows(((extra_array_names[array], ), ))
                    writer.writerows(zip(extra_arrays[array]))

        msg = " subject %s, session %s, saved event record" % (subject,
                                                               session)
        log_file.update_log(time=clock.get_date_hmdmy(),
                            entry=msg,
                            directory=self.directory)
Exemple #2
0
def read_session_info(subject, file_name, directory):
    """ Read session information """

    with open(file_name, mode="r") as file:
        csv_file = reader(file, delimiter=",")

        # First row is always a header
        # Always has "subject" and "session"
        header = csv_file.__next__()

        # Try to read subject and session
        try:
            subject_column = header.index("subject")
        except ValueError:
            msg = " 'subject' column not found"
            print(msg)
            log_file.update_log(time=get_date_hmdmy(),
                                entry=msg,
                                directory=directory)
            return (None)
        try:
            session_column = header.index("session")
        except ValueError:
            msg = " 'session' column not found"
            print(msg)
            log_file.update_log(time=get_date_hmdmy(),
                                entry=msg,
                                directory=directory)
            return (None)

        got_session = False

        for row in csv_file:
            if row[subject_column] == subject:
                session = row[session_column]
                msg = " from %s found session %s" % (file_name, session)
                log_file.update_log(time=get_date_hmdmy(),
                                    entry=msg,
                                    directory=directory)
                got_session = True

        if not got_session:
            msg = " failed to find session in %s" % (file_name)
            log_file.update_log(time=get_date_hmdmy(),
                                entry=msg,
                                directory=directory)
            return (None)

    return (session)
Exemple #3
0
    def teardown(self):
        msg = "stop pigpio.pi"
        log_file.update_log(get_date_hmdmy(), msg, self.directory)
        self.pi.stop()

        msg = "stop pigpiod"
        system("sudo killall pigpiod")
        log_file.update_log(get_date_hmdmy(), msg, self.directory)

        msg = " stop experiment, subject %s, session %s" % (self.subject,
                                                            self.session)
        log_file.update_log(get_date_hmdmy(), msg, self.directory)
Exemple #4
0
    def __init__(self,
                 subject,
                 parameter_file,
                 session=None,
                 session_info_file=None,
                 directory="/home/pi/Experiment",
                 windows_test=False):

        chdir(directory)
        self.directory = directory
        msg = " start experiment, subject %s, session %s" % (subject, session)
        log_file.update_log(get_date_hmdmy(), msg, directory)

        if (session_info_file != None):
            # Logs are updated inside
            session = experiment_reader.read_session_info(
                subject, session_info_file, directory)
        elif (session != None):
            msg = " from args set session %s" % (session)
            log_file.update_log(get_date_hmdmy(), msg, directory)
        self.session = session

        if (not windows_test):
            msg = " start pigpiod"
            log_file.update_log(get_date_hmdmy(), msg, directory)
            system("sudo pigpiod")
            sleep(0.1)

            msg = " make pigpio.pi"
            log_file.update_log(get_date_hmdmy(), msg, directory)
            # Make the pigpio.pi object
            self.pi = pigpio.pi()

        self.subject = subject
        # Log files are updated inside read_experiment_params()
        self.parameters = experiment_reader.read_experiment_params(
            subject, session, parameter_file, directory)
Exemple #5
0
def read_experiment_params(subject, session, file_name, directory):
    """ Read a CSV file and return a dictionary of parameters """

    session = str(session)
    msg = " subject %s, session %s, reading %s" % (subject, session, file_name)
    log_file.update_log(time=get_date_hmdmy(), entry=msg, directory=directory)

    with open(file_name, mode="r") as file:
        csv_file = reader(file, delimiter=",")

        # First row is always a header
        # Always has "subject" and "session"
        header = csv_file.__next__()
        try:
            subject_column = header.index("subject")
        except ValueError:
            msg = " 'subject' column not found"
            print(msg)
            log_file.update_log(time=get_date_hmdmy(),
                                entry=msg,
                                directory=directory)
            return (None)
        try:
            session_column = header.index("session")
        except ValueError:
            msg = " 'session' column not found"
            print(msg)
            log_file.update_log(time=get_date_hmdmy(),
                                entry=msg,
                                directory=directory)
            return (None)

        # Find columns for parameters
        parameter_cols = [
            x for x in range(len(header))
            if x not in [subject_column, session_column]
        ]

        parameter_dict = {}
        got_subject_session = False

        for row in csv_file:
            if row[subject_column] == subject and row[
                    session_column] == session:
                parameter_dict["subject"] = row[subject_column]
                parameter_dict["session"] = int(row[session_column])
                for col in parameter_cols:
                    # Record log files
                    value = row[col]
                    parameter_name = header[col]
                    parameter_dict[parameter_name] = value
                    msg = " subject %s, session %s, %s := %s" % (
                        subject, session, parameter_name, value)
                    log_file.update_log(time=get_date_hmdmy(),
                                        entry=msg,
                                        directory=directory)
                got_subject_session = True

        if not got_subject_session:
            msg = " failed to find subject %s, session %s" % (subject, session)
            log_file.update_log(time=get_date_hmdmy(),
                                entry=msg,
                                directory=directory)

    return (parameter_dict)