# -*- coding: utf-8 -*- """ Created on Tue Apr 24 14:13:43 2018 @author: wschnupp """ import pandas as pd import glob, os import time import tkinter as tk from tkinter import filedialog from tkinter import messagebox class dataHandler: def __init__(self): self.root = tk.Tk() self.root.withdraw() self.dataframe=None self.rowsSaved=0 self.autosaveEveryN=5 self.filename='' self.onlineFeedback=False # set to true if you want output ont eh console on every trial that gets saved def statusChange(self,newStatus): if newStatus=="start": self.createDatafile() return if newStatus=="chooseNextTrial": return if newStatus=="waitForStart": return if newStatus=="presentTrial": return if newStatus=="getResponse": return if newStatus=="reward": return if newStatus=="punish": return else: print("datahandling module received unrecognized status: "+newStatus) return def createDatafile(self, fname=None): if fname is None: self.filename = filedialog.asksaveasfilename(title = "Save Data In File:",filetypes = (("CSV","*.csv"),("all files","*.*"))) else: self.filename = fname if not self.filename[-1]=='v': self.filename=self.filename+'.csv' def saveTrial(self, trialParameters): # build a dict that combines all the info of the last trial and add it to a pandas dataframe if self.dataframe is None: self.dataframe=pd.DataFrame(trialParameters, index=[0]) else: self.dataframe=self.dataframe.append(trialParameters,ignore_index=True) if len(self.dataframe)-self.rowsSaved>self.autosaveEveryN: self.dumpToFile() if self.onlineFeedback: if 'correct' in self.dataframe.columns: Ncorrect=self.dataframe[self.dataframe['correct']].count()[0] Ntotal=self.dataframe.count()[0] print('*** Current performance: {} out of {} correct ({:.1f}%)'.format(Ncorrect, Ntotal,Ncorrect*100/Ntotal)) def dumpToFile(self): if self.filename=='': return if self.dataframe is None: return try: self.dataframe.to_csv(self.filename) self.rowsSaved=len(self.dataframe) except: messagebox.showwarning('Could not save data!','Choose a different data file.') self.createDatafile() self.dumpToFile() def done(self): self.dumpToFile() self.root.quit()