def crt_mdl_prms(tplPngSize, varNum1, varExtXmin,  varExtXmax, varNum2,<EOL>varExtYmin, varExtYmax, varNumPrfSizes, varPrfStdMin,<EOL>varPrfStdMax, kwUnt='<STR_LIT>', kwCrd='<STR_LIT>'):
<EOL>varNumMdls = varNum1 * varNum2 * varNumPrfSizes<EOL>aryMdlParams = np.zeros((varNumMdls, <NUM_LIT:3>), dtype=np.float32)<EOL>varCntMdlPrms = <NUM_LIT:0><EOL>if kwCrd == '<STR_LIT>':<EOL><INDENT>vecX = np.linspace(varExtXmin, varExtXmax, varNum1, endpoint=True)<EOL>vecY = np.linspace(varExtYmin, varExtYmax, varNum2, endpoint=True)<EOL>vecPrfSd = np.linspace(varPrfStdMin, varPrfStdMax, varNumPrfSizes,<EOL>endpoint=True)<EOL>if kwUnt == '<STR_LIT>':<EOL><INDENT>pass<EOL><DEDENT>elif kwUnt == '<STR_LIT>':<EOL><INDENT>vecX, vecY, vecPrfSd = rmp_deg_pixel_xys(vecX, vecY, vecPrfSd,<EOL>tplPngSize, varExtXmin,<EOL>varExtXmax, varExtYmin,<EOL>varExtYmax)<EOL><DEDENT>else:<EOL><INDENT>print('<STR_LIT>' +<EOL>'<STR_LIT>')<EOL><DEDENT>for idxX in range(<NUM_LIT:0>, varNum1):<EOL><INDENT>for idxY in range(<NUM_LIT:0>, varNum2):<EOL><INDENT>for idxSd in range(<NUM_LIT:0>, varNumPrfSizes):<EOL><INDENT>aryMdlParams[varCntMdlPrms, <NUM_LIT:0>] = vecX[idxX]<EOL>aryMdlParams[varCntMdlPrms, <NUM_LIT:1>] = vecY[idxY]<EOL>aryMdlParams[varCntMdlPrms, <NUM_LIT:2>] = vecPrfSd[idxSd]<EOL>varCntMdlPrms += <NUM_LIT:1><EOL><DEDENT><DEDENT><DEDENT><DEDENT>elif kwCrd == '<STR_LIT>':<EOL><INDENT>vecRad = np.linspace(<NUM_LIT:0.0>, varExtXmax, varNum1, endpoint=True)<EOL>vecTht = np.linspace(<NUM_LIT:0.0>, <NUM_LIT:2>*np.pi, varNum2, endpoint=False)<EOL>aryRad, aryTht = np.meshgrid(vecRad, vecTht, indexing='<STR_LIT>')<EOL>vecRad = aryRad.flatten()<EOL>vecTht = aryTht.flatten()<EOL>vecX, vecY = map_pol_to_crt(vecTht, vecRad)<EOL>vecPrfSd = np.linspace(varPrfStdMin, varPrfStdMax, varNumPrfSizes,<EOL>endpoint=True)<EOL>if kwUnt == '<STR_LIT>':<EOL><INDENT>pass<EOL><DEDENT>elif kwUnt == '<STR_LIT>':<EOL><INDENT>vecX, vecY, vecPrfSd = rmp_deg_pixel_xys(vecX, vecY, vecPrfSd,<EOL>tplPngSize, varExtXmin,<EOL>varExtXmax, varExtYmin,<EOL>varExtYmax)<EOL><DEDENT>for idxXY in range(<NUM_LIT:0>, varNum1*varNum2):<EOL><INDENT>for idxSd in range(<NUM_LIT:0>, varNumPrfSizes):<EOL><INDENT>aryMdlParams[varCntMdlPrms, <NUM_LIT:0>] = vecX[idxXY]<EOL>aryMdlParams[varCntMdlPrms, <NUM_LIT:1>] = vecY[idxXY]<EOL>aryMdlParams[varCntMdlPrms, <NUM_LIT:2>] = vecPrfSd[idxSd]<EOL>varCntMdlPrms += <NUM_LIT:1><EOL><DEDENT><DEDENT><DEDENT>else:<EOL><INDENT>print('<STR_LIT>' +<EOL>'<STR_LIT>')<EOL><DEDENT>return aryMdlParams<EOL>
Create an array with all possible model parameter combinations

    Parameters
    ----------
    tplPngSize : tuple, 2
        Pixel dimensions of the visual space (width, height).
    varNum1 : int, positive
        Number of x-positions to model
    varExtXmin : float
        Extent of visual space from centre in negative x-direction (width)
    varExtXmax : float
        Extent of visual space from centre in positive x-direction (width)
    varNum2 : float, positive
        Number of y-positions to model.
    varExtYmin : int
        Extent of visual space from centre in negative y-direction (height)
    varExtYmax : float
        Extent of visual space from centre in positive y-direction (height)
    varNumPrfSizes : int, positive
        Number of pRF sizes to model.
    varPrfStdMin : float, positive
        Minimum pRF model size (standard deviation of 2D Gaussian)
    varPrfStdMax : float, positive
        Maximum pRF model size (standard deviation of 2D Gaussian)
    kwUnt: str
        Keyword to set the unit for model parameter combinations; model
        parameters can be in pixels ["pix"] or degrees of visual angles ["deg"]
    kwCrd: str
        Keyword to set the coordinate system for model parameter combinations;
        parameters can be in cartesian ["crt"] or polar ["pol"] coordinates

    Returns
    -------
    aryMdlParams : 2d numpy array, shape [n_x_pos*n_y_pos*n_sd, 3]
        Model parameters (x, y, sigma) for all models.