Пример #1
0
    def create_stimuli(self):
        

        
        #generate PRF stimulus
        self.prf_stim = PRFStim(session=self, 
                        squares_in_bar=self.settings['PRF stimulus settings']['Squares in bar'], 
                        bar_width_deg=self.settings['PRF stimulus settings']['Bar width in degrees'],
                        flicker_frequency=self.settings['PRF stimulus settings']['Checkers motion speed'])#self.deg2pix(self.settings['prf_max_eccentricity']))    
        

        #currently unused
        #self.instruction_string = """Please fixate in the center of the screen. Your task is to respond whenever the dot changes color."""
        

        #generate raised cosine alpha mask
        mask = filters.makeMask(matrixSize=self.win.size[0], 
                                shape='raisedCosine', 
                                radius=np.array([self.win.size[1]/self.win.size[0], 1.0]),
                                center=(0.0, 0.0), 
                                range=[-1, 1], 
                                fringeWidth=0.02
                                )

        self.mask_stim = visual.GratingStim(self.win, 
                                        mask=-mask, 
                                        tex=None, 
                                        units='pix',
                                        
                                        size=[self.win.size[0],self.win.size[1]], 
                                        pos = np.array((0.0,0.0)), 
                                        color = [0,0,0]) 
        



        #as current basic task, generate fixation circles of different colors, with black border
        
        fixation_radius_pixels=tools.monitorunittools.deg2pix(self.settings['PRF stimulus settings']['Size fixation dot in degrees'], self.monitor)/2

#        self.fixation_circle = visual.Circle(self.win, 
#            radius=fixation_radius_pixels, 
#            units='pix', lineColor='black')
        
        
        #two colors of the fixation circle for the task
        self.fixation_disk_0 = visual.Circle(self.win, 
            units='pix', radius=fixation_radius_pixels, 
            fillColor=[1,-1,-1], lineColor=[1,-1,-1])
        
        self.fixation_disk_1 = visual.Circle(self.win, 
            units='pix', radius=fixation_radius_pixels, 
            fillColor=[-1,1,-1], lineColor=[-1,1,-1])
Пример #2
0
 def test_numpyFilterMask(self):
     """if the mask is passed in as a numpy array it goes through a different
     set of rules when turned into a texture. But the outcome should be as above
     """
     win = self.win
     from psychopy.visual import filters
     gaussMask = filters.makeMask(128, 'gauss')
     size = numpy.array([2.0,2.0])*self.scaleFactor
     fileName = os.path.join(utils.TESTS_DATA_PATH, 'testimage.jpg')
     image = visual.ImageStim(win, image=fileName, mask=gaussMask,
                              size=size, flipHoriz=True, flipVert=True)
     image.draw()
     utils.compareScreenshot('imageAndGauss_%s.png' %(self.contextName), win)
     win.flip()
Пример #3
0
    def _get_array(self, mask='circle', upscale=None):
        """Return square `np.ndarray` of alternating ones and negative ones
        with shape `(self.side_len, self.side_len)`."""
        board = np.ones((self.side_len, self.side_len), dtype=np.int32)
        board[::2, ::2] = -1
        board[1::2, 1::2] = -1

        if upscale is None:
            upscale = np.ceil(self.size / self.side_len)

        if upscale != 1:
            board = np.repeat(np.repeat(board, upscale, axis=0),
                              upscale,
                              axis=1)

        if mask is not None:
            mask = makeMask(board.shape[0], 'raisedCosine')

        board = board if not self.inverted else board * -1

        return board, mask
Пример #4
0
This demo creates a radial array as a patch stimulus, using helper functions from
psychopy.filters and then creates a second sub-stimulus created from a section of
the original. Both are masked simply by circles.
"""
from psychopy import visual, event, core
from psychopy.visual import filters
import numpy as np

win = visual.Window([800, 600], units='pix')

# Generate the radial textures
cycles = 6
res = 512
radius = filters.makeRadialMatrix(res)
radialTexture = np.sin(radius * 2 * np.pi * cycles)
mainMask = filters.makeMask(res)

# Select the upper left quadrant of our radial stimulus
radialTexture_sub = radialTexture[256:, 0:256]
# and create an appropriate mask for it
subMask = filters.makeMask(res, radius=0.5, center=[-0, 0])

bigStim = visual.GratingStim(win,
                             tex=radialTexture,
                             mask=mainMask,
                             color='white',
                             size=512,
                             sf=1.0 / 512,
                             interpolate=True)
# draw the quadrant stimulus centered in the top left quadrant of the 'base' stimulus (so they're aligned)
subStim = visual.GratingStim(win,
Пример #5
0
    def __init__(self,
                 win,
                 pos,
                 size,
                 session,
                 ori=0,
                 side_len=12,
                 checkerboard_type='square',
                 hide=False):

        self.screen = win
        self.config = session.config
        self.session = session

        self.size = self.session.deg2pix(size)
        self.pos = [self.session.deg2pix(pos[0]), self.session.deg2pix(pos[1])]

        self.ori = ori

        self.hide = hide

        checkerboard_size = self.size / self.config.get(
            'checker_cross', 'ratio_to_circle')

        if checkerboard_type == 'square':
            self.checkerboard = CheckerBoard(self.screen,
                                             size=checkerboard_size,
                                             side_len=side_len,
                                             pos=self.pos,
                                             ori=ori)
        elif checkerboard_type == 'radial':
            mask = makeMask(checkerboard_size, 'raisedCosine', range=(0, 1))

            mask = mask[int(checkerboard_size / 2),
                        int(checkerboard_size / 2):]
            self.checkerboard = RadialStim(self.screen,
                                           mask=mask,
                                           pos=self.pos,
                                           size=checkerboard_size,
                                           angularCycles=side_len,
                                           radialCycles=side_len / 4)

        elif checkerboard_type == 'none':
            self.checkerboard = GratingStim(self.screen, opacity=0)

        else:
            ValueError('{} is not a valid checkerboard type'.format(
                checkerboard_type))

        rim_radius = self.size / 2 / self.config.get('checker_cross',
                                                     'ratio_to_circle') - 1

        self.rim = Rim(self.screen,
                       rim_radius,
                       rim_radius * self.config.get('rim', 'rim_ratio'),
                       self.config.get('rim', 'n_parts'),
                       pos=self.pos,
                       contrast=self.config.get('rim', 'contrast'),
                       ori=ori)

        ratio_inner_circle = 1 / self.config.get('checker_cross', 'ratio_to_circle') /\
                             self.config.get('rim', 'rim_ratio')

        self.check_cross = CheckerBoardCross(
            self.screen,
            self.size,
            side_len=32,
            n_blocks=4,
            pos=self.pos,
            ratio_inner_circle=ratio_inner_circle,
            ori=ori)

        fixation_size = self.config.get('fixation', 'proportion') * self.size

        self.fixation = FixationPoint(self.screen, self.pos, fixation_size)
Пример #6
0
"""

from __future__ import division

from psychopy import visual, event, core
from psychopy.visual import filters
import numpy as np

win = visual.Window([800, 600], units='pix')

# Generate the radial textures
cycles = 6
res = 512
radius = filters.makeRadialMatrix(res)
radialTexture = np.sin(radius * 2 * np.pi * cycles)
mainMask = filters.makeMask(res)

# Select the upper left quadrant of our radial stimulus
radialTexture_sub = radialTexture[256:, 0:256]
# and create an appropriate mask for it
subMask = filters.makeMask(res, radius=0.5, center=[-0, 0])

bigStim = visual.GratingStim(win, tex=radialTexture, mask=mainMask,
   color='white', size=512, sf=1.0 / 512, interpolate=True)
# draw the quadrant stimulus centered in the top left quadrant of the 'base' stimulus (so they're aligned)
subStim = visual.GratingStim(win, tex=radialTexture_sub, pos=(-128, 128), mask=subMask,
   color=[1, 1, 1], size=256, sf=1.0 / 256, interpolate=True, autoLog=False)

bigStim.draw()
subStim.draw()
globalClock =core.Clock()
Пример #7
0
dotsY = numpy.random.uniform(low=-fieldSize, high=fieldSize, size=(dotsN,))
dotsTheta = numpy.random.rand(dotsN) * 360  # array with shape (500,)
dotsRadius = numpy.random.rand(dotsN) * fieldSize
randDotsX = numpy.random.uniform(low=-fieldSize, high=fieldSize,size=(dotsN,))
randDotsY = numpy.random.uniform(low=-fieldSize, high=fieldSize,size=(dotsN,))

alpha= numpy.random.uniform(low=0, high=2*pi,size=(dotsN,))
veloX = speed * cos(alpha)
veloY = speed * sin(alpha)

outfieldDotsY = numpy.logical_or((randDotsY >= deathBorder), (randDotsY <= -deathBorder))
outfieldDotsX = numpy.logical_or((randDotsX >= deathBorder), (randDotsX <= -deathBorder))

# initializing experiment stimuli

invCircle = filters.makeMask(512,'circle')*-1 #-1 means black, 1: white
maskStim1 = visual.GratingStim(win,tex=None,mask=invCircle, size=fieldSize*2+elemSize, contrast=-1, pos=(posX, posY)) #-1 contrast for blackness
maskStim2 = visual.GratingStim(win,tex=None,mask=invCircle, size=fieldSize*2+elemSize, contrast=-1, pos=(-posX, -posY))

transDots = visual.ElementArrayStim(win,
                                    nElements=dotsN, units = 'deg', sizes=elemSize, elementTex=None,
                                    colors=(1.0, 1.0, 1.0), xys=random([dotsN, 2]) * fieldSize,
                                    colorSpace='rgb', elementMask='circle',
                                    fieldSize=fieldSize, fieldShape = 'sqr') #(fieldSize, fieldSize)

rotDots = visual.ElementArrayStim(win,
                                  nElements=dotsN, units = 'deg', sizes=elemSize, elementTex=None,
                                  colors=(1.0, 1.0, 1.0), xys=random([dotsN, 2]),
                                  colorSpace='rgb', elementMask='circle', texRes=128,
                                  fieldSize=fieldSize, fieldShape = 'sqr')