コード例 #1
0
ファイル: interval.py プロジェクト: jzeitoun/pacu-src
class Interval(object):
    def __init__(self, win):
        frameRate = win.getActualFrameRate()  # could be None. What then ?
        self.frameRate = frameRate / 2
        self.frameDuration = 1.0 / round(self.frameRate)
        self.win = win
        self.isi = StaticPeriod(screenHz=self.frameRate, win=win)

    def start(self):
        self.isi.start(self.frameDuration)

    def complete(self):
        self.isi.complete()
コード例 #2
0
def testStaticPeriod():
    static = StaticPeriod()
    static.start(0.1)
    wait(0.05)
    assert static.complete()==1
    static.start(0.1)
    wait(0.11)
    assert static.complete()==0
コード例 #3
0
ファイル: controller.py プロジェクト: pearsonlab/pygonogo
    def display_outcome(self):
        # update text onscreen
        self.display.set_target_text(self.which_target,
                                     str(self.pts_this_trial))
        self.score += self.pts_this_trial
        self.display.set_score(self.score)

        # refresh screen
        self.outcome_sound.play()
        self.mark_event('outcome', channel=5)

        # during static period, code between start and complete will run
        iti = StaticPeriod()
        iti.start(self.outcome_delay)
        self.display.draw()
        iti.complete()

        # remove text overlay on target
        self.display.set_target_text(self.which_target, '')
コード例 #4
0
ファイル: controller.py プロジェクト: jzeitoun/pacu-src
 def show_phased(self, phase):
     isi = StaticPeriod(screenHz=self.afr, win=self.window)
     for frame in self.movie:
         if event.getKeys('escape'):
             raise UserAbortException()
         isi.start(self.mspf)
         self.instance.image = Image.fromarray(frame)
         self.instance.draw()
         self.window.flip()
         isi.complete()
コード例 #5
0
ファイル: controller.py プロジェクト: hlmpsy/pygonogo
    def display_outcome(self):
        # update text onscreen
        self.display.set_target_text(self.which_target,
                                     str(self.pts_this_trial))
        self.score += self.pts_this_trial
        self.display.set_score(self.score)

        # refresh screen
        self.outcome_sound.play()
        self.mark_event('outcome', channel=5)

        # during static period, code between start and complete will run
        iti = StaticPeriod()
        iti.start(self.outcome_delay)
        self.display.draw()
        iti.complete()

        # remove text overlay on target
        self.display.set_target_text(self.which_target, '')
コード例 #6
0
ファイル: test_core.py プロジェクト: bergwiesel/psychopy
def testStaticPeriod():
    static = StaticPeriod()
    static.start(0.1)
    wait(0.05)
    assert static.complete()==1
    static.start(0.1)
    wait(0.11)
    assert static.complete()==0

    win = Window(autoLog=False)
    static = StaticPeriod(screenHz=60, win=win)
    static.start(.002)
    assert win.recordFrameIntervals == False
    static.complete()
    assert static._winWasRecordingIntervals == win.recordFrameIntervals
    win.close()

    # Test if screenHz parameter is respected, i.e., if after completion of the
    # StaticPeriod, 1/screenHz seconds are still remaining, so the period will
    # complete after the next flip.
    refresh_rate = 100.0
    period_duration = 0.1
    timer = CountdownTimer()
    win = Window(autoLog=False)

    static = StaticPeriod(screenHz=refresh_rate, win=win)
    static.start(period_duration)
    timer.reset(period_duration )
    static.complete()

    assert np.allclose(timer.getTime(),
                       1.0/refresh_rate,
                       atol=0.001)
    win.close()
コード例 #7
0
ファイル: test_core.py プロジェクト: sappelhoff/psychopy
def test_StaticPeriod():
    static = StaticPeriod()
    static.start(0.1)
    wait(0.05)
    assert static.complete() == 1
    static.start(0.1)
    wait(0.11)
    assert static.complete() == 0

    win = Window(autoLog=False)
    static = StaticPeriod(screenHz=60, win=win)
    static.start(.002)
    assert win.recordFrameIntervals is False
    static.complete()
    assert static._winWasRecordingIntervals == win.recordFrameIntervals
    win.close()

    # Test if screenHz parameter is respected, i.e., if after completion of the
    # StaticPeriod, 1/screenHz seconds are still remaining, so the period will
    # complete after the next flip.
    refresh_rate = 100.0
    period_duration = 0.1
    timer = CountdownTimer()
    win = Window(autoLog=False)

    static = StaticPeriod(screenHz=refresh_rate, win=win)
    static.start(period_duration)
    timer.reset(period_duration)
    static.complete()

    if _vmTesting:
        tolerance = 0.01  # without a proper screen timing might not eb sub-ms
    else:
        tolerance = 0.001
    assert np.allclose(timer.getTime(), 1.0 / refresh_rate, atol=tolerance)
    win.close()
コード例 #8
0
ファイル: test_core.py プロジェクト: 9173860/psychopy
def testStaticPeriod():
    static = StaticPeriod()
    static.start(0.1)
    wait(0.05)
    assert static.complete()==1
    static.start(0.1)
    wait(0.11)
    assert static.complete()==0

    win = Window(autoLog=False)
    static = StaticPeriod(screenHz=60, win=win)
    static.start(.002)
    assert win.recordFrameIntervals == False
    static.complete()
    assert static._winWasRecordingIntervals == win.recordFrameIntervals
コード例 #9
0
def testStaticPeriod():
    static = StaticPeriod()
    static.start(0.1)
    wait(0.05)
    assert static.complete() == 1
    static.start(0.1)
    wait(0.11)
    assert static.complete() == 0

    win = Window(autoLog=False)
    static = StaticPeriod(screenHz=60, win=win)
    static.start(.002)
    assert win.recordFrameIntervals == False
    static.complete()
    assert static._winWasRecordingIntervals == win.recordFrameIntervals
コード例 #10
0
def testStaticPeriod():
    static = StaticPeriod()
    static.start(0.1)
    wait(0.05)
    assert static.complete()==1
    static.start(0.1)
    wait(0.11)
    assert static.complete()==0

    win = Window(autoLog=False)
    static = StaticPeriod(screenHz=60, win=win)
    static.start(.002)
    assert win.recordFrameIntervals == False
    static.complete()
    assert static._winWasRecordingIntervals == win.recordFrameIntervals
    win.close()

    # Test if screenHz parameter is respected, i.e., if after completion of the
    # StaticPeriod, 1/screenHz seconds are still remaining, so the period will
    # complete after the next flip.
    refresh_rate = 100.0
    period_duration = 0.1
    timer = CountdownTimer()
    win = Window(autoLog=False)

    static = StaticPeriod(screenHz=refresh_rate, win=win)
    static.start(period_duration)
    timer.reset(period_duration )
    static.complete()

    assert np.allclose(timer.getTime(),
                       old_div(1,refresh_rate),
                       atol=0.001)
    win.close()
コード例 #11
0
def mainLoop(blocks=1, trialNumber=216):

    #global blockCount
    blockCount = 0

    trialCount = 0
    timer = Clock()

    maskDelay = delayForMask

    #make finalItems which will be reused for every block
    generatedItems = finalItems(blocks)
    itemsForDisplay = generatedItems

    #main trial loop runns for n-blocks
    for block in range(blocks):

        #f' is the python3 equivalent of "something{}something.format()" function for python2
        betweenBlocksInfo = (
            f'Der {blockCount}. Block ist nun vorbei, wenn Sie möchten können Sie eine kurze Pause machen.\n\
        \n\
        Fortfahren mit "Leertaste".')

        if blockCount == blocks - 1 and blockCount > 0:
            TextStim(win, (
                f'Der {blockCount}. Block ist nun vorbei, wenn Sie möchten können Sie eine kurze Pause machen. Nun folgt der letzte Durchgang.\n\
            \n\
Fortfahren mit "Leertaste".'),
                     units='norm',
                     pos=(0.0, 0.0)).draw()
            win.flip()
            waitKeys(keyList=['space'])
        elif blockCount > 0:
            TextStim(win, betweenBlocksInfo, units='norm',
                     pos=(0.0, 0.0)).draw()
            win.flip()
            waitKeys(keyList=['space'])

        fixationCross.draw()
        win.flip()
        wait(0.6)
        win.flip()

        blockCount = block + 1

        #loop run for n-trials
        for trial in range(trialNumber):
            if itemsForDisplay[trial]['itemInfo'][
                    'side'] == -1 and itemsForDisplay[trial]['itemInfo'][
                        'first'] == 1:
                corr = -1
            elif itemsForDisplay[trial]['itemInfo'][
                    'side'] == 1 and itemsForDisplay[trial]['itemInfo'][
                        'first'] == 1:
                corr = 1
            elif itemsForDisplay[trial]['itemInfo'][
                    'side'] == -1 and itemsForDisplay[trial]['itemInfo'][
                        'first'] == 0:
                corr = 1
            elif itemsForDisplay[trial]['itemInfo'][
                    'side'] == 1 and itemsForDisplay[trial]['itemInfo'][
                        'first'] == 0:
                corr = -1

            timeDelayBetweenNames = itemsForDisplay[trial]['itemInfo']['delay']

            timer.reset()
            time1 = timer.getTime()
            intertDelay = 0

            trialCount += 1

            waitDuration = StaticPeriod(screenHz=60)
            d = interTrialDelay()
            print('interTrialDelay: ', d)
            t1 = clock.getTime()

            if timeDelayBetweenNames != 0.0:
                waitDuration.start(d)

                nameToDrawFirst = itemsForDisplay[trial]['firstName']
                nameToDrawSecond = itemsForDisplay[trial]['secondName']
                if expVersion == 1:
                    mask1 = itemsForDisplay[trial]['firstMask']
                    mask2 = itemsForDisplay[trial]['secondMask']
                    maskStimuli = [mask1, mask2]

                stimuli = [nameToDrawFirst, nameToDrawSecond]

                intertDelay += d

                print('delay should be: ', timeDelayBetweenNames)

                nameToDrawFirst.draw()

                waitDuration.complete()
                print('1. loop dur: ', clock.getTime() - t1)

                win.flip()
                t1 = clock.getTime()

                w1 = clock.getTime()
                waitDuration.start(timeDelayBetweenNames)
                for s in stimuli:
                    s.draw()
                waitDuration.complete()
                print('2. loop dur: ', clock.getTime() - w1)

                win.flip()
                realTimeDelay = clock.getTime() - t1
                print('effective time delay: ', realTimeDelay)

                if expVersion == 1:
                    waitDuration.start(maskDelay)
                    for m in maskStimuli:
                        m.draw()
                    waitDuration.complete()
                    win.flip()

            else:
                waitDuration.start(d)

                nameToDrawFirst = itemsForDisplay[trial]['firstName']
                nameToDrawSecond = itemsForDisplay[trial]['secondName']

                if expVersion == 1:
                    mask1 = itemsForDisplay[trial]['firstMask']
                    mask2 = itemsForDisplay[trial]['secondMask']
                    maskStimuli = [mask1, mask2]

                stimuli = [nameToDrawFirst, nameToDrawSecond]

                print('delay should be: ', timeDelayBetweenNames)

                for s in stimuli:
                    s.draw()
                waitDuration.complete()
                realTimeDelay = 0
                win.flip()

                print('effective time delay: ', realTimeDelay)

                if expVersion == 1:
                    waitDuration.start(maskDelay)
                    for m in maskStimuli:
                        m.draw()
                    waitDuration.complete()
                    win.flip()

            #start response record
            responseStart = clock.getTime()

            #wait a specific amount of time for the keypress
            pressedKey = waitKeys(
                keyList=['f', 'j', 'space',
                         quitkey])  #escape for quiting the experiment

            #below just for simulating persons
            #            pressedKey = random.choice(['f','j','space'])
            #            wait(0.2)

            #end response clock
            responseEnd = clock.getTime()

            #calculate response time
            RT = responseEnd - responseStart

            if pressedKey == None:
                pass
            elif quitkey in pressedKey:
                quit()
            print('response time: ', RT)

            correct = 0

            #if-else statements for 'possible' feedback and response recording
            if pressedKey == None:
                correct = 0
            elif itemsForDisplay[trial]['itemInfo']['delay'] == 0.0:
                correct = -2  #with 0 delay there cannot be a correct answer
            elif 'f' in pressedKey and corr == 1:
                print('incorrect')
                correct = 0
            elif 'j' in pressedKey and corr == -1:
                print('incorrect')
                correct = 0
            elif 'f' in pressedKey and corr == -1:
                print('correct')
                correct = 1
            elif 'j' in pressedKey and corr == 1:
                print('correct')
                correct = 1
            elif 'space' in pressedKey:
                correct = -1  # -1 then means didnt know

            win.flip()
            d = interTrialDelay()
            print('interTrialDelay: ', d)
            intertDelay += d
            wait(d)
            fixationCross.draw()
            win.flip()

            #aand again save the current trials while waiting the inter-trial duration instead of doing nothing
            d = interTrialDelay()
            print('interTrialDelay: ', d)
            t1 = clock.getTime()
            waitDuration.start(d)
            intertDelay += d
            interTrialDuration = intertDelay
            trialDuration = timer.getTime() - time1 + d

            #what is saved:
            #name class
            #if garbled or not
            #left name
            #right name
            #intended time delay
            #real time delay
            #which name was displayed first
            #response time
            #if the response was correct
            #person ID, first name, last name, country, adress

            if itemsForDisplay[trial]['itemInfo']['side'] == -1:
                leftName = itemsForDisplay[trial]['itemInfo']['unfamWord']
                rightName = itemsForDisplay[trial]['itemInfo']['famWord']
                leftNameType = 'unfamiliar'
                rightNameType = 'familiar'
            else:
                leftName = itemsForDisplay[trial]['itemInfo']['famWord']
                rightName = itemsForDisplay[trial]['itemInfo']['unfamWord']
                leftNameType = 'familiar'
                rightNameType = 'unfamiliar'

            if itemsForDisplay[trial]['itemInfo']['first'] == 1:
                firstNameType = 'unfamiliar'
            else:
                firstNameType = 'familiar'

            if os.path.isfile(f'exp_degrade_{person.id}_{startDate}.txt'):
                with open(f'exp_degrade_{person.id}_{startDate}.txt',
                          'a') as file:
                    file.write('\t'.join([itemsForDisplay[trial]['itemInfo']['class'],str(itemsForDisplay[trial]['itemInfo']['garbled']),leftName ,\
                    rightName , leftNameType, rightNameType, str(itemsForDisplay[trial]['itemInfo']['delay']) , str(realTimeDelay), \
                    nameToDrawFirst.text.replace('%',''), firstNameType , str(RT) , str(pressedKey) ,str(correct) , str(blockCount) , str(trialCount) , person.id ,\
                    str(trialDuration), str(interTrialDuration)])+ '\n')

            else:
                with open(f'exp_degrade_{person.id}_{startDate}.txt',
                          'w+') as file:
                    file.write(
                        'class\tgarbled\tleft Name\tright Name\tleftNameType\trightNameType\tintendedTimeDelay\trealTimeDelay\t\
nameShowedFirst\tfirstNameType\tresponseTime\tpressedKey\tcorrectAnswer\tblock\ttrial\tID\ttrialDuration\tinterTrialDuration'
                        + '\n')
                with open(f'exp_degrade_{person.id}_{startDate}.txt',
                          'a') as file:
                    file.write('\t'.join([itemsForDisplay[trial]['itemInfo']['class'],str(itemsForDisplay[trial]['itemInfo']['garbled']),leftName ,\
                    rightName , leftNameType, rightNameType, str(itemsForDisplay[trial]['itemInfo']['delay']) , str(realTimeDelay), \
                    nameToDrawFirst.text.replace('%',''), firstNameType , str(RT) , str(pressedKey) ,str(correct) , str(blockCount) , str(trialCount) , person.id ,\
                    str(trialDuration), str(interTrialDuration)])+ '\n')

            waitDuration.complete()
            print('3. loop dur: ', clock.getTime() - t1)

            win.flip()

            print('trialDuration: ', trialDuration)

    endTime = expTime.getTime() - startTime
    #write person demographics
    with open(f'exp_degrade_{person.id}_{startDate}.txt', 'a') as file:
        file.write(' '.join(['experiment Duration: ', str(endTime),' ID: ',person.id,' first name: ',person.first,\
    ' last name: ',person.last,' country: ',person.country,\
    ' adress: ',person.adress,' birhtday: ',person.adress,' animal: ',person.animal]))

    TextStim(win,
             AppEndText,
             font='Calibri',
             units='norm',
             pos=(0, 0),
             height=0.08,
             wrapWidth=0.9).draw()
    win.flip()
    waitKeys(keyList=['escape'])
コード例 #12
0
def practiceLoop(trials):

    practiceInfo = TextStim(win,
                            practiceInstructions,
                            units='norm',
                            pos=(0, 0),
                            height=0.05,
                            wrapWidth=0.9)
    practiceInfo.draw()
    win.flip()

    if waitKeys(keyList=['space']):
        pass

    fixationCross.draw()
    win.flip()
    wait(0.6)

    t1 = clock.getTime()
    win.flip()

    print(clock.getTime() - t1)

    namesLeft = []
    namesRight = []

    for i in range(trials * 2):
        namesLeft.append(random.choice(unfamFirstNames))
        namesRight.append(random.choice(unfamFirstNames))

    for i in range(trials):

        timeDelay = random.choice([0.0, 0.0334, 0.0835, 0.1, 0.2])
        print('delay should be: ', timeDelay)

        waitDuration = StaticPeriod()
        waitDuration.start(0.6)

        left = namesLeft[i]
        right = namesRight[i]

        leftName = TextStim(win,
                            left,
                            units='norm',
                            pos=(posLeft),
                            color=(1, 0, 0),
                            height=0.1)
        rightName = TextStim(win,
                             right,
                             units='norm',
                             pos=(posRight),
                             color=(1, 0, 0),
                             height=0.1)

        answer_infoLeft = TextStim(win,
                                   'links',
                                   units='norm',
                                   pos=(-0.8, -0.7),
                                   height=0.1)
        answer_infoRight = TextStim(win,
                                    'rechts',
                                    units='norm',
                                    pos=(0.8, -0.7),
                                    height=0.1)
        answer_infoDontKnow = TextStim(win,
                                       "unsicher",
                                       units='norm',
                                       pos=(0, -0.8),
                                       height=0.1)

        correct = TextStim(win, 'richtig!', units='norm', pos=(0, 0))
        incorrect = TextStim(win, 'falsch!', units='norm', pos=(0, 0))

        #randomly chose which name will be shown first aand the other will then be second
        nameToDrawFirst = random.choice([leftName, rightName])

        if nameToDrawFirst == leftName:
            nameToDrawSecond = rightName
        else:
            nameToDrawSecond = leftName

        stimuli = [
            nameToDrawFirst, answer_infoLeft, answer_infoRight,
            answer_infoDontKnow
        ]
        fullStimuli = [
            nameToDrawFirst, nameToDrawSecond, answer_infoLeft,
            answer_infoRight, answer_infoDontKnow
        ]

        for s in stimuli:
            s.draw()

        print('ANSWER: ', nameToDrawFirst.text)

        waitDuration.complete()

        #make flip and take time
        win.flip()
        t1 = clock.getTime()

        waitDuration.start(timeDelay)

        for s in fullStimuli:
            s.draw()

        waitDuration.complete()

        win.flip()
        t2 = clock.getTime()
        print('effective time delay: ', t2 - t1)

        #start response time window
        responseStart = clock.getTime()

        #wait a specific amount of time for the keypress
        pressedKey = waitKeys(keyList=['f', 'j', 'space', quitkey])

        #only for simulating agents
        #pressedKey = random.choice(['f','j'])

        responseEnd = clock.getTime()

        #calculate response time
        RT = responseEnd - responseStart

        if quitkey in pressedKey:
            win.close()

        print('response time: ', RT)

        if 'f' in pressedKey and nameToDrawFirst.text == leftName.text:
            correct.draw()
            win.flip()
            wait(0.4)
        elif 'j' in pressedKey and nameToDrawFirst.text == rightName.text:
            correct.draw()
            win.flip()
            wait(0.4)
        elif 'j' in pressedKey and nameToDrawFirst.text != rightName.text:
            incorrect.draw()
            win.flip()
            wait(0.4)
        elif 'f' in pressedKey and nameToDrawFirst.text != leftName.text:
            incorrect.draw()
            win.flip()
            wait(0.4)

        fixationCross.draw()
        win.flip()
        wait(0.6)
        win.flip()

    TextStim(win, practiceEndText, pos=(0, 0), height=0.08,
             wrapWidth=0.9).draw()
    win.flip()
    #fixationCross.draw()
    waitKeys(keyList=['space'])
    wait(0.4)
    win.flip()
    wait(0.2)
    win.flip()
コード例 #13
0
ファイル: interval.py プロジェクト: jzeitoun/pacu-src
 def __init__(self, win):
     frameRate = win.getActualFrameRate()  # could be None. What then ?
     self.frameRate = frameRate / 2
     self.frameDuration = 1.0 / round(self.frameRate)
     self.win = win
     self.isi = StaticPeriod(screenHz=self.frameRate, win=win)