class Staircase(object): def __init__(self, subject, pre_fix): self.logger = Logger(subject, pre_fix) self.trialsDesired = 50 startVal = 0.5 nReversals = 10 stepSizes = [0.03, 0.01, 0.01, 0.005, 0.005, 0.002, 0.001] nTrials = 50 nUp = 1 nDown = 3 stepType = "lin" minVal = 0 maxVal = 0.5 self.staircase_obj = StaircaseObject(startVal, nReversals, stepSizes, nTrials, nUp, nDown, stepType, minVal, maxVal) self.logger.write("Staircase for Stereo Threshold measurement") self.logger.write("Staircase object is initiated with " "startVal:%.2f " "nReversals:%.2f " "stepSizes:%s " "nTrials:%.2f " "nUp:%.2f " "nDown:%.2f " "minVal:%.2f " "maxVal:%.2f " % (startVal, nReversals, stepSizes, nTrials, nUp, nDown, minVal, maxVal)) self.logger.write("Staircase trials is set to %d" % nTrials) def run(self, disparity): self.logger.write("=" * 36) self.logger.write("Staircase for Stereo Threshold measurement") self.logger.write("=" * 36) # disc demo disparity.set_disparity(0.1) disparity.demo() for i, disp in enumerate(self.staircase_obj): disparity.set_disparity(disp) response = disparity.run() interval = disparity.get_cross_interval() # [1,2] self.logger.write("Trial %d :\n" "\tdisparity %.2f," "\tcross at interval %d" % (i, disp, interval)) self.logger.write("\tobserver reports %s" % response) # Update the pdf self.staircase_obj.update(int(response)) # Get final estimate. t = self.staircase_obj.mean(final=6) self.logger.write('\nmean of final 6 reversals = %.3f\n' % t) self.logger.write_filestamp()
class Staircase(object): def __init__(self, subject, pre_fix): self.logger = Logger(subject, pre_fix) self.trialsDesired = 50 startVal = 0.5 nReversals = 10 stepSizes = [0.03, 0.01, 0.01, 0.005, 0.005, 0.002, 0.001] nTrials = 50 nUp = 1 nDown = 3 stepType = "lin" minVal = 0 maxVal = 0.5 self.staircase_obj = StaircaseObject( startVal, nReversals, stepSizes, nTrials, nUp, nDown, stepType, minVal, maxVal) self.logger.write("Staircase for Stereo Threshold measurement") self.logger.write("Staircase object is initiated with " "startVal:%.2f " "nReversals:%.2f " "stepSizes:%s " "nTrials:%.2f " "nUp:%.2f " "nDown:%.2f " "minVal:%.2f " "maxVal:%.2f " %(startVal,nReversals,stepSizes,nTrials,nUp,nDown,minVal,maxVal)) self.logger.write("Staircase trials is set to %d" %nTrials) def run(self, disparity): self.logger.write("="*36) self.logger.write("Staircase for Stereo Threshold measurement") self.logger.write("="*36) # disc demo disparity.set_disparity(0.1) disparity.demo() for i, disp in enumerate(self.staircase_obj): disparity.set_disparity(disp) response = disparity.run() interval = disparity.get_cross_interval() # [1,2] self.logger.write("Trial %d :\n" "\tdisparity %.2f," "\tcross at interval %d" %(i, disp, interval)) self.logger.write("\tobserver reports %s" %response) # Update the pdf self.staircase_obj.update(int(response)) # Get final estimate. t = self.staircase_obj.mean(final=6) self.logger.write('\nmean of final 6 reversals = %.3f\n' %t) self.logger.write_filestamp()
class EmuStaircase(object): def __init__(self, logfile): self.logfile = logfile params_line = self.get_init_params() startVal = eval( re.compile(r'startVal:([0-9.]+) ').findall(params_line)[0]) nReversals = eval( re.compile(r'nReversals:([0-9.]+) ').findall(params_line)[0]) stepSizes = eval( re.compile(r'stepSizes:(\[.+\]) ').findall(params_line)[0]) nTrials = eval( re.compile(r'nTrials:([0-9.]+) ').findall(params_line)[0]) nUp = eval(re.compile(r'nUp:([0-9.]+) ').findall(params_line)[0]) nDown = eval(re.compile(r'nDown:([0-9.]+) ').findall(params_line)[0]) stepType = "lin" minVal = eval(re.compile(r'minVal:([0-9.]+) ').findall(params_line)[0]) maxVal = eval(re.compile(r'maxVal:([0-9.]+)').findall(params_line)[0]) self.logger = ModLogger(self.logfile, 'recomp') self.staircase_obj = StaircaseObject(startVal, nReversals, stepSizes, nTrials, nUp, nDown, stepType, minVal, maxVal) self.logger.write("Staircase for Stereo Threshold measurement") self.logger.write("Staircase object is initiated with " "startVal:%.2f " "nReversals:%.2f " "stepSizes:%s " "nTrials:%.2f " "nUp:%.2f " "nDown:%.2f " "minVal:%.2f " "maxVal:%.2f " % (startVal, nReversals, stepSizes, nTrials, nUp, nDown, minVal, maxVal)) self.logger.write("Staircase trials is set to %d" % nTrials) def run(self): self.logger.write("=" * 36) self.logger.write("Staircase for Stereo Threshold measurement") self.logger.write("=" * 36) # disc demo data = self.collect_log_data() for i, trial_data in enumerate(data): disp, interval, response = trial_data try: self.staircase_obj.next() except: break self.logger.write("Trial %d :\n" "\tdisparity %.2f," "\tcross at interval %d" % (i, disp, interval)) self.logger.write("\tobserver reports %s" % response) # Update the pdf self.staircase_obj.update(int(response)) # Get final estimate. t = self.staircase_obj.mean(final=6) self.logger.write('\nmean of final 6 reversals = %.3f\n' % t) self.logger.write_filestamp() def get_init_params(self): params_line_re = re.compile( r'^Staircase object is initiated with (.+)$') with open(self.logfile) as log: for line in log.readlines(): params_str = params_line_re.findall(line) if params_str: return params_str[0].strip() def collect_log_data(self): data = [] disparity_re = re.compile(r'^\tdisparity (.+),') cross_at_re = re.compile(r'cross at interval ([1|2])') report_re = re.compile(r'\tobserver reports (.+)$') disparity, cross_at, report = None, None, None with open(self.logfile) as log: for line in log.readlines(): disparity_str = disparity_re.findall(line) cross_at_str = cross_at_re.findall(line) report_str = report_re.findall(line) if disparity_str: disparity = float(disparity_str[0].strip()) if cross_at_str: cross_at = int(cross_at_str[0].strip()) if report_str: report = True if report_str[0].strip() == 'True' else False data.append((disparity, cross_at, report)) return data
class EmuStaircase(object): def __init__(self, logfile): self.logfile = logfile params_line = self.get_init_params() startVal = eval(re.compile(r'startVal:([0-9.]+) ').findall(params_line)[0]) nReversals = eval(re.compile(r'nReversals:([0-9.]+) ').findall(params_line)[0]) stepSizes = eval(re.compile(r'stepSizes:(\[.+\]) ').findall(params_line)[0]) nTrials = eval(re.compile(r'nTrials:([0-9.]+) ').findall(params_line)[0]) nUp = eval(re.compile(r'nUp:([0-9.]+) ').findall(params_line)[0]) nDown = eval(re.compile(r'nDown:([0-9.]+) ').findall(params_line)[0]) stepType = "lin" minVal = eval(re.compile(r'minVal:([0-9.]+) ').findall(params_line)[0]) maxVal = eval(re.compile(r'maxVal:([0-9.]+)').findall(params_line)[0]) self.logger = ModLogger(self.logfile, 'recomp') self.staircase_obj = StaircaseObject( startVal, nReversals, stepSizes, nTrials, nUp, nDown, stepType, minVal, maxVal) self.logger.write("Staircase for Stereo Threshold measurement") self.logger.write("Staircase object is initiated with " "startVal:%.2f " "nReversals:%.2f " "stepSizes:%s " "nTrials:%.2f " "nUp:%.2f " "nDown:%.2f " "minVal:%.2f " "maxVal:%.2f " %(startVal,nReversals,stepSizes,nTrials,nUp,nDown,minVal,maxVal)) self.logger.write("Staircase trials is set to %d" %nTrials) def run(self): self.logger.write("="*36) self.logger.write("Staircase for Stereo Threshold measurement") self.logger.write("="*36) # disc demo data = self.collect_log_data() for i, trial_data in enumerate(data): disp, interval, response = trial_data try: self.staircase_obj.next() except: break self.logger.write("Trial %d :\n" "\tdisparity %.2f," "\tcross at interval %d" %(i, disp, interval)) self.logger.write("\tobserver reports %s" %response) # Update the pdf self.staircase_obj.update(int(response)) # Get final estimate. t = self.staircase_obj.mean(final=6) self.logger.write('\nmean of final 6 reversals = %.3f\n' %t) self.logger.write_filestamp() def get_init_params(self): params_line_re = re.compile(r'^Staircase object is initiated with (.+)$') with open(self.logfile) as log: for line in log.readlines(): params_str = params_line_re.findall(line) if params_str: return params_str[0].strip() def collect_log_data(self): data = [] disparity_re = re.compile(r'^\tdisparity (.+),') cross_at_re = re.compile(r'cross at interval ([1|2])') report_re = re.compile(r'\tobserver reports (.+)$') disparity, cross_at, report = None, None, None with open(self.logfile) as log: for line in log.readlines(): disparity_str = disparity_re.findall(line) cross_at_str = cross_at_re.findall(line) report_str = report_re.findall(line) if disparity_str: disparity = float(disparity_str[0].strip()) if cross_at_str: cross_at = int(cross_at_str[0].strip()) if report_str: report = True if report_str[0].strip() == 'True' else False data.append((disparity, cross_at, report)) return data