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)
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)
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)
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)
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)