示例#1
0
    def pre_mainloop(self):

        MostBasicPsychopyFeedback.pre_mainloop(self)

        # do the trick -- SAVE all of those things! --> and put it in settings.pkl.
        v = dict()

        v['caption'] = self.caption
        v['color'] = self.color
        v['fontheight'] = self.fontheight

        v['STARTKEYS'] = self.STARTKEYS

        v['EX_THRLINEWIDTH'] = self.EX_THRLINEWIDTH
        v['EX_COLORGAP'] = self.EX_COLORGAP
        v['EX_TVSP'] = self.EX_TVSP
        v['EX_TPAUSE'] = self.EX_TPAUSE
        v['EX_NREGULATE'] = self.EX_NREGULATE
        v['EX_NTRANSFER'] = self.EX_NTRANSFER

        v['EX_SHOWCHECKORCROSS'] = self.EX_SHOWCHECKORCROSS
        v['EX_SHOWCHECKORCROSSTRANSFER'] = self.EX_SHOWCHECKORCROSSTRANSFER
        v['EX_SHOWPOINTS'] = self.EX_SHOWPOINTS

        v['EX_SQUARESIZE'] = self.EX_SQUARESIZE
        v['EX_UPREGTEXT'] = self.EX_UPREGTEXT
        v['EX_TESTSIGNALUPDATEINTERVAL'] = self.EX_TESTSIGNALUPDATEINTERVAL
        v['EX_NREST'] = self.EX_NREST
        v['EX_SCALING'] = self.EX_SCALING
        v['EX_INTERACTIONMODE'] = self.EX_INTERACTIONMODE
        v['EX_NOBSERVE'] = self.EX_NOBSERVE
        v['EX_NOREGTEXT'] = self.EX_NOREGTEXT
        v['EX_TINSTR'] = self.EX_TINSTR
        v['EX_THERMOCLIMS'] = self.EX_THERMOCLIMS
        v['EX_GRAPHICSMODE'] = self.EX_GRAPHICSMODE

        v['EX_STAIRCASEMANIPULATION'] = self.EX_STAIRCASEMANIPULATION
        v['EX_POINTS_PENALTY'] = self.EX_POINTS_PENALTY
        v['EX_TESTSIGNALPERIOD'] = self.EX_TESTSIGNALPERIOD
        v['EX_TMARK'] = self.EX_TMARK
        v['EX_TESTNFNOISE'] = self.EX_TESTNFNOISE
        v['EX_PATCHCOLOR'] = self.EX_PATCHCOLOR
        v['EX_TJITT'] = self.EX_TJITT
        v['EX_TFB'] = self.EX_TFB
        v['EX_POINTS_REWARD'] = self.EX_POINTS_REWARD
        v['EX_PR_SLEEPTIME'] = self.EX_PR_SLEEPTIME
        v['EX_TESTSIGNALTYPE'] = self.EX_TESTSIGNALTYPE
        v['EX_BUTTONS'] = self.EX_BUTTONS
        v['EX_INSTR'] = self.EX_INSTR
        v['EX_RUNS'] = self.EX_RUNS

        v['EX_SND_LOWESTTONE'] = self.EX_SND_LOWESTTONE
        v['EX_SND_HIGHESTTONE'] = self.EX_SND_HIGHESTTONE

        v['EX_EMG_THERMOWIDTH'] = self.EX_EMG_THERMOWIDTH
        v['EX_EMG_THERMOHEIGHT'] = self.EX_EMG_THERMOHEIGHT
        v['EX_EMG_THERMOEDGE'] = self.EX_EMG_THERMOEDGE

        v['EX_TXT_COUNTER'] = self.EX_TXT_COUNTER

        v['MONITOR_PIXWIDTH'] = self.MONITOR_PIXWIDTH
        v['MONITOR_PIXHEIGHT'] = self.MONITOR_PIXHEIGHT
        v['MONITOR_WIDTH'] = self.MONITOR_WIDTH
        v['MONITOR_HEIGHT'] = self.MONITOR_HEIGHT
        v['MONITOR_DISTANCE'] = self.MONITOR_DISTANCE
        v['MONITOR_GAMMA'] = self.MONITOR_GAMMA
        v['MONITOR_FPS'] = self.MONITOR_FPS
        v['MONITOR_USEDEGS'] = self.MONITOR_USEDEGS
        v['MONITOR_DEGS_WIDTHBASE'] = self.MONITOR_DEGS_WIDTHBASE
        v['MONITOR_DEGS_HEIGHTBASE'] = self.MONITOR_DEGS_HEIGHTBASE
        v['MONITOR_FLIPHORIZONTAL'] = self.MONITOR_FLIPHORIZONTAL
        v['MONITOR_FLIPVERTICAL'] = self.MONITOR_FLIPVERTICAL
        v['MONITOR_RECORDFRAMEINTERVALS'] = self.MONITOR_RECORDFRAMEINTERVALS
        v['MONITOR_NSCREENS'] = self.MONITOR_NSCREENS
        v['MONITOR_DISPLAYONSCREEN'] = self.MONITOR_DISPLAYONSCREEN
        v['MONITOR_FULLSCR'] = self.MONITOR_FULLSCR
        v['MONITOR_ALLOWGUI'] = self.MONITOR_ALLOWGUI

        v['LOG_PATHFILE'] = self.LOG_PATHFILE
        v['LOG_PATHFILE_EVENT'] = self.LOG_PATHFILE_EVENT

        v['EVENT_LPT_TRIGGER_WAIT'] = self.EVENT_LPT_TRIGGER_WAIT
        v['EVENT_destip'] = self.EVENT_destip
        v['EVENT_destport'] = self.EVENT_destport
        v['EVENT_LPTAddress'] = self.EVENT_LPTAddress
        v['EVENT_LPTTrigWaitTime'] = self.EVENT_LPTTrigWaitTime
        v['EVENT_TRIGLOG'] = self.EVENT_TRIGLOG
        v['EVENT_sendParallel'] = self.EVENT_sendParallel
        v['EVENT_sendTcpIp'] = self.EVENT_sendTcpIp
        v['EVENT_sendLogFile'] = self.EVENT_sendLogFile
        v['EVENT_printToTerminal'] = self.EVENT_printToTerminal
        v['EVENT_printToTerminalAllowed'] = self.EVENT_printToTerminalAllowed

        # so these are NOW control parameters:
        v['EX_TUNING_TYPE'] = self.EX_TUNING_TYPE  # = 'thr'  # alternatives are 'linear', and maybe 'fancy'
        v['EX_TUNING_PARAMS'] = self.EX_TUNING_PARAMS  # = [1.0, 0.0]  # linear requires a slope and offset. - eill not be used if it's not 'linear'
        v['EX_WIN_CONDITION'] = self.EX_WIN_CONDITION  # = 'time_above_thr'
        v['EX_WIN_PARAMS'] = self.EX_WIN_PARAMS  # = [0.25]  # 25 % of the time, it needs to be above the threshold...
        v['EX_NUMBEROFSETS'] = self.EX_NUMBEROFSETS  # = 6  # how long (sets of 6) do we wish our experiment to have?? Determines also our staircases.
        v['EX_MIXOFSETS'] = self.EX_MIXOFSETS  # = {'train':3, 'transfer':1, 'observe':1, 'rest':1}
        v['EX_STAIRIDENTIFIER'] = self.EX_STAIRIDENTIFIER  # = '0001'  # needed to keep track of the staircases.
        v['EX_XorV_RESET_POINTS'] = self.EX_XorV_RESET_POINTS  # = False  # at the start of the day --> this should be True.

        # use the Cpntrol Parameters:
        CP = self.CP  # control parameters...

        # create G, put it into self too..
        G = dict()
        G['v'] = v
        self.G = G

        # we need this in order to continue working as if we're doing it using the normal (test) script...
        for key in G['v']:
            G[key] = G['v'][
                key]  # this is actually superfluous. But removing it might possibly break things.

        # the main clock
        mainClock = clock.Clock()
        G['mainClock'] = mainClock

        # screen/monitor...
        G = init_screen(G)  # we need to do this

        # logging...
        logging.setDefaultClock(G['mainClock'])
        newLogFile = create_incremental_filename(G['v']['LOG_PATHFILE'])
        expLogger = logging.LogFile(
            newLogFile, logging.EXP)  # the correct loglevel should be EXP!
        print(expLogger)
        logging.LogFile(newLogFile,
                        logging.EXP)  # the correct loglevel should be EXP!
        print('made new logfile: ' + newLogFile)
        for key in G['v'].keys():
            logging.data("{key}: {value}".format(key=key, value=G['v'][key]))
        logging.flush()
        G['logging'] = logging  # put into the G, which is in self

        # event handler...
        G = init_eventcodes(G)  # and this??
        G = start_eh(G)

        init_staircases_quest(G)
        st = make_stimuli(G, CP)
        pr = init_programs(G, st, CP)

        ex = define_experiment(
            G, st, pr,
            CP)  # pr is passed to define_experiment, but then we won't need...

        self.st = st
        self.ex = ex

        # take care of the randomization(s)...
        trialopts = []

        trialopts.append([1, 1, 2, 1, 3, 4])
        trialopts.append([1, 1, 2, 1, 4, 3])
        trialopts.append([1, 1, 2, 3, 1, 4])
        trialopts.append([1, 1, 2, 4, 1, 3])
        trialopts.append([1, 1, 3, 1, 2, 4])
        trialopts.append([1, 1, 3, 1, 4, 2])
        trialopts.append([1, 1, 3, 2, 1, 4])
        trialopts.append([1, 1, 3, 4, 1, 2])
        trialopts.append([1, 1, 4, 1, 3, 2])
        trialopts.append([1, 1, 4, 1, 2, 3])
        trialopts.append([1, 1, 4, 3, 1, 2])
        trialopts.append([1, 1, 4, 2, 1, 3])
        trialopts.append([1, 2, 1, 4, 1, 3])
        trialopts.append([1, 2, 1, 3, 1, 4])
        trialopts.append([1, 3, 1, 4, 1, 2])
        trialopts.append([1, 3, 1, 2, 1, 4])
        trialopts.append([1, 4, 1, 2, 1, 3])
        trialopts.append([1, 4, 1, 3, 1, 2])

        random.shuffle(trialopts)
        random.shuffle(trialopts)
        random.shuffle(trialopts)  # 3 time shuffle, for good luck :-)
        # computational anathema and heretic!

        my_trial_sequence = flatten(
            trialopts[0:G['v']['EX_RUNS']])  # we do 5 of them.
        my_trial_definitions = {
            1: 'train',
            2: 'transfer',
            3: 'observe',
            4: 'rest'
        }

        # so to debug, just run tasks_dbg instead of tasks.
        for t_i in my_trial_sequence:
            self.runlist = iter(
                [my_trial_definitions[i] for i in my_trial_sequence])

        # the ev loop we're going to be using..
        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)
        self.loop = loop

        if G['EX_TESTNFNOISE'] is True:
            self.loop.create_task(pr['GenTestSignal'](G, st, CP))

        logging.flush()
        G['logging'] = logging

        G['cl'] = clock.Clock(
        )  # init the trial-by-trial clock here and put into G...
示例#2
0
    def pre_mainloop(self):
        
        MostBasicPsychopyFeedback.pre_mainloop(self)
        
        
        # do the trick -- SAVE all of those things! --> and put it in settings.pkl.
        v=dict()
        v['STARTKEYS']                      =self.STARTKEYS
        v['STARTMRIKEYS']                   =self.STARTMRIKEYS
        v['MONITOR_PIXWIDTH']               =self.MONITOR_PIXWIDTH
        v['MONITOR_PIXHEIGHT']              =self.MONITOR_PIXHEIGHT
        v['MONITOR_WIDTH']                  =self.MONITOR_WIDTH  # width of screen
        v['MONITOR_HEIGHT']                 =self.MONITOR_HEIGHT  # height of screen
        v['MONITOR_DISTANCE']               =self.MONITOR_DISTANCE  # distance to screen
        v['MONITOR_GAMMA']                  =self.MONITOR_GAMMA
        v['MONITOR_FPS']                    =self.MONITOR_FPS
        v['MONITOR_USEDEGS']                =self.MONITOR_USEDEGS
        v['MONITOR_DEGS_WIDTHBASE']         =self.MONITOR_DEGS_WIDTHBASE
        v['MONITOR_DEGS_HEIGHTBASE']        =self.MONITOR_DEGS_HEIGHTBASE
        v['MONITOR_FLIPHORIZONTAL']         =self.MONITOR_FLIPHORIZONTAL
        v['MONITOR_FLIPVERTICAL']           =self.MONITOR_FLIPVERTICAL
        
        v['MONITOR_NSCREENS']               =self.MONITOR_NSCREENS
        v['MONITOR_DISPLAYONSCREEN']        =self.MONITOR_DISPLAYONSCREEN
        v['MONITOR_FULLSCR']                =self.MONITOR_FULLSCR
        v['MONITOR_ALLOWGUI']               =self.MONITOR_ALLOWGUI
            
        v['LOGDIR']                         =self.LOGDIR  # for if you want to change this...
        v['LOGFILEBASE']                    =self.LOGFILEBASE  # how to call our logfile --> it adds a number each time
        v['IPADDRESS']                      =self.IPADDRESS  # port and ip to send codes towards to
        v['PORT']                           =self.PORT  # which port is nice?  
        v['BUTTONS']                        =self.BUTTONS  # the button codes coming out of event.getStim()
        v['tooSoonTime']                    =self.tooSoonTime  # if it's pressed before this time --> discard + error
        v['LPT_TRIGGER_WAIT']               =self.LPT_TRIGGER_WAIT  # how long are the LPT port pulses?
        v['RECORDFRAMEINTERVALS']           =self.RECORDFRAMEINTERVALS  # for debugging..
        v['DO_VISUAL']                      =self.DO_VISUAL
        v['DO_AUDIO']                       =self.DO_AUDIO
        v['DO_GNG']                         =self.DO_GNG
        v['GNGSPEED']                       =self.GNGSPEED
        v['GNG_ARROWGOESRED']               =self.GNG_ARROWGOESRED
        v['GNG_ARROWISALWAYSRED']           =self.GNG_ARROWISALWAYSRED
        v['GNG_ARROWGOESRED_DELAY']         =self.GNG_ARROWGOESRED_DELAY
        v['GNG_SELECT_NUMBER']              =self.GNG_SELECT_NUMBER
        v['AUDIOTONE_ERROR_COMMISSION']     =self.AUDIOTONE_ERROR_COMMISSION
        v['AUDIOTONE_STOP']                 =self.AUDIOTONE_STOP
        v['VIS_SHOWOPPOSITE']               =self.VIS_SHOWOPPOSITE
        v['VIS_radialFreq']                 =self.VIS_radialFreq
        v['VIS_angleFreq']                  =self.VIS_angleFreq
        v['VIS_checkerSize']                =self.VIS_checkerSize
        v['VIS_checkerSpeedMultiplier']     =self.VIS_checkerSpeedMultiplier
        v['EYESCLOSED_TIME']                =self.EYESCLOSED_TIME
        v['EX_EV_IGNORE_KEYS']              =self.EX_EV_IGNORE_KEYS
        
        v['EVENT_destip']                   =self.EVENT_destip
        v['EVENT_destport']                 =self.EVENT_destport
        v['EVENT_LPTAddress']               =self.EVENT_LPTAddress
        v['EVENT_LPTTrigWaitTime']          =self.EVENT_LPTTrigWaitTime
        v['EVENT_TRIGLOG']                  =self.EVENT_TRIGLOG
        v['EVENT_sendParallel']             =self.EVENT_sendParallel
        v['EVENT_sendTcpIp']                =self.EVENT_sendTcpIp
        v['EVENT_sendLogFile']              =self.EVENT_sendLogFile
        v['EVENT_printToTerminal']          =self.EVENT_printToTerminal
        v['EVENT_printToTerminalAllowed']   =self.EVENT_printToTerminalAllowed  # only allow the stops, which are < 40.
        
        v['INSTR']                          =self.INSTR



        G=dict()
        G['v']=v
        #
        # global variable with references to desired memory locations is easier to pass around.
        mainClock=clock.Clock()
        G['mainClock']=mainClock
        
        self.G=G  # try this..
        
        
        # doing all of the init stuff:
        G=init_screen(G)
        G=init_logfile(G)
        G=init_stimuli(G)
        G=init_eventcodes(G)
        
        G=init_gng(G)
        
        G=init_reset_clock(G)
        
        G=init_audio(G)
        G=init_visual(G)
        
        G=start_ev(G)
    def pre_mainloop(self):

        MostBasicPsychopyFeedback.pre_mainloop(self)

        # do the trick -- SAVE all of those things! --> and put it in settings.pkl.
        v = dict()

        v['MONITOR_PIXWIDTH'] = self.MONITOR_PIXWIDTH
        v['MONITOR_PIXHEIGHT'] = self.MONITOR_PIXHEIGHT
        v['MONITOR_WIDTH'] = self.MONITOR_WIDTH  # width of screen
        v['MONITOR_HEIGHT'] = self.MONITOR_HEIGHT  # height of screen
        v['MONITOR_DISTANCE'] = self.MONITOR_DISTANCE  # distance to screen
        v['MONITOR_GAMMA'] = self.MONITOR_GAMMA
        v['MONITOR_FPS'] = self.MONITOR_FPS
        v['MONITOR_USEDEGS'] = self.MONITOR_USEDEGS
        v['MONITOR_DEGS_WIDTHBASE'] = self.MONITOR_DEGS_WIDTHBASE
        v['MONITOR_DEGS_HEIGHTBASE'] = self.MONITOR_DEGS_HEIGHTBASE
        v['MONITOR_FLIPHORIZONTAL'] = self.MONITOR_FLIPHORIZONTAL
        v['MONITOR_FLIPVERTICAL'] = self.MONITOR_FLIPVERTICAL

        v['MONITOR_NSCREENS'] = self.MONITOR_NSCREENS
        v['MONITOR_DISPLAYONSCREEN'] = self.MONITOR_DISPLAYONSCREEN
        v['MONITOR_FULLSCR'] = self.MONITOR_FULLSCR
        v['MONITOR_ALLOWGUI'] = self.MONITOR_ALLOWGUI

        v['LOGDIR'] = self.LOGDIR  # for if you want to change this...
        v['LOGFILEBASE'] = self.LOGFILEBASE  # how to call our logfile --> it adds a number each time
        v['IPADDRESS'] = self.IPADDRESS  # port and ip to send codes towards to
        v['PORT'] = self.PORT  # which port is nice?
        v['BUTTONS'] = self.BUTTONS  # the button codes coming out of event.getStim()
        v['tooSoonTime'] = self.tooSoonTime  # if it's pressed before this time --> discard + error
        v['LPT_TRIGGER_WAIT'] = self.LPT_TRIGGER_WAIT  # how long are the LPT port pulses?
        v['RECORDFRAMEINTERVALS'] = self.RECORDFRAMEINTERVALS  # for debugging..
        v['DO_VISUAL'] = self.DO_VISUAL
        v['DO_AUDIO'] = self.DO_AUDIO
        v['DO_GNG'] = self.DO_GNG
        v['GNGSPEED'] = self.GNGSPEED
        v['GNG_ARROWGOESRED'] = self.GNG_ARROWGOESRED
        v['AUDIOTONE_ERROR_COMMISSION'] = self.AUDIOTONE_ERROR_COMMISSION
        v['AUDIOTONE_STOP'] = self.AUDIOTONE_STOP
        v['VIS_SHOWOPPOSITE'] = self.VIS_SHOWOPPOSITE
        v['VIS_radialFreq'] = self.VIS_radialFreq
        v['VIS_angleFreq'] = self.VIS_angleFreq
        v['VIS_checkerSize'] = self.VIS_checkerSize
        v['VIS_checkerSpeedMultiplier'] = self.VIS_checkerSpeedMultiplier
        v['EYESCLOSED_TIME'] = self.EYESCLOSED_TIME

        v['EVENT_destip'] = self.EVENT_destip
        v['EVENT_destport'] = self.EVENT_destport
        v['EVENT_LPTAddress'] = self.EVENT_LPTAddress
        v['EVENT_LPTTrigWaitTime'] = self.EVENT_LPTTrigWaitTime
        v['EVENT_TRIGLOG'] = self.EVENT_TRIGLOG
        v['EVENT_sendParallel'] = self.EVENT_sendParallel
        v['EVENT_sendTcpIp'] = self.EVENT_sendTcpIp
        v['EVENT_sendLogFile'] = self.EVENT_sendLogFile
        v['EVENT_printToTerminal'] = self.EVENT_printToTerminal
        v['EVENT_printToTerminalAllowed'] = self.EVENT_printToTerminalAllowed  # only allow the stops, which are < 40.

        v['INSTR'] = self.INSTR

        # load in the settings file that is near THIS script!
        # the settings will also be written in the logfile
        # come to think of it -- probably this isn't necessary either.
        # settings and constants can be put into a file liek that, right?
        # --> test
        # OK, not if you're evaluating based on those constants like I try to do here!
        # so save/load to settings file seems to be the way to go.
        settingsfile = os.path.join(
            os.path.dirname(os.path.realpath(__file__)), 'settings.pkl')
        with open(settingsfile, 'wb') as f:
            pickle.dump(v, f)
            time.sleep(0.5)