Skip to content

Commit

Permalink
Rename rotated distance metric to oblique
Browse files Browse the repository at this point in the history
Closes #10
  • Loading branch information
JorisVincent committed Mar 22, 2023
1 parent a8c8e02 commit 4eec2de
Show file tree
Hide file tree
Showing 9 changed files with 28 additions and 27 deletions.
6 changes: 3 additions & 3 deletions docs/reference/demos/components/waves.md
Expand Up @@ -39,7 +39,7 @@ w_height = iw.IntSlider(value=10, min=1, max=20, description="height [deg]")
w_width = iw.IntSlider(value=10, min=1, max=20, description="width [deg]")
w_ppd = iw.IntSlider(value=20, min=1, max=40, description="ppd")
w_distance_metric = iw.Dropdown(value="horizontal", options=['horizontal','vertical','rotated','radial','cityblock','angular'], description="distance_metric")
w_distance_metric = iw.Dropdown(value="horizontal", options=['horizontal','vertical','oblique','radial','cityblock','angular'], description="distance_metric")
w_freq = iw.FloatSlider(value=1, min=0, max=2, description="frequency [cpd]")
w_phase = iw.FloatSlider(value=0, min=0, max=360, description="phase shift [deg]")
w_rot = iw.FloatSlider(value=0, min=0, max=360, description="rotation [deg]")
Expand Down Expand Up @@ -124,7 +124,7 @@ w_height = iw.IntSlider(value=10, min=1, max=20, description="height [deg]")
w_width = iw.IntSlider(value=10, min=1, max=20, description="width [deg]")
w_ppd = iw.IntSlider(value=20, min=1, max=40, description="ppd")
w_distance_metric = iw.Dropdown(value="horizontal", options=['horizontal','vertical','rotated','radial','cityblock','angular'], description="distance_metric")
w_distance_metric = iw.Dropdown(value="horizontal", options=['horizontal','vertical','oblique','radial','cityblock','angular'], description="distance_metric")
w_freq = iw.FloatSlider(value=1, min=0, max=2, description="frequency [cpd]")
w_phase = iw.FloatSlider(value=0, min=0, max=360, description="phase shift [deg]")
w_rot = iw.FloatSlider(value=0, min=0, max=360, description="rotation [deg]")
Expand Down Expand Up @@ -209,7 +209,7 @@ w_height = iw.IntSlider(value=10, min=1, max=20, description="height [deg]")
w_width = iw.IntSlider(value=10, min=1, max=20, description="width [deg]")
w_ppd = iw.IntSlider(value=20, min=1, max=40, description="ppd")
w_distance_metric = iw.Dropdown(value="horizontal", options=['horizontal','vertical','rotated','radial','cityblock','angular'], description="distance_metric")
w_distance_metric = iw.Dropdown(value="horizontal", options=['horizontal','vertical','oblique','radial','cityblock','angular'], description="distance_metric")
w_freq = iw.FloatSlider(value=0.5, min=0, max=2, description="frequency [cpd]")
w_rot = iw.FloatSlider(value=0, min=0, max=360, description="rotation [deg]")
w_phase = iw.FloatSlider(value=0, min=0, max=360, description="phase shift [deg]")
Expand Down
2 changes: 1 addition & 1 deletion docs/reference/demos/stimuli/plaids.md
Expand Up @@ -107,7 +107,7 @@ def show_plaid(
"origin": origin,
"round_phase_width": round_phase_width,
"period": period,
"distance_metric": "rotated",
"distance_metric": "oblique",
}
p_grating1 = {
Expand Down
10 changes: 5 additions & 5 deletions stimupy/components/__init__.py
Expand Up @@ -46,7 +46,7 @@ def image_base(visual_size=None, shape=None, ppd=None, rotation=0.0, origin="mea
"x", "y" : single axes
"horizontal", "vertical" : numpy.ndarray of shape, with distance from origin,
in deg. visual angle, at each pixel
"rotated" : numpy.ndarray of shape, with rotated distance from origin,
"oblique" : numpy.ndarray of shape, with oblique distance from origin,
in deg. visual angle, at each pixel
"radial" : numpyn.ndarray of shape, with radius from origin,
in deg. visual angle, at each pixel
Expand Down Expand Up @@ -88,12 +88,12 @@ def image_base(visual_size=None, shape=None, ppd=None, rotation=0.0, origin="mea
angular -= np.deg2rad(rotation + 90)
angular %= 2 * np.pi

# Rotated
# Oblique
alpha = [np.cos(np.deg2rad(rotation)), np.sin(np.deg2rad(rotation))]
rotated = alpha[0] * xx + alpha[1] * yy
oblique = alpha[0] * xx + alpha[1] * yy

if origin == "corner":
rotated = rotated - rotated.min()
oblique = oblique - oblique.min()

return {
"visual_size": visual_size,
Expand All @@ -104,7 +104,7 @@ def image_base(visual_size=None, shape=None, ppd=None, rotation=0.0, origin="mea
"y": y,
"horizontal": xx,
"vertical": yy,
"rotated": rotated,
"oblique": oblique,
"cityblock": cityblock,
"radial": radial,
"angular": angular,
Expand Down
7 changes: 4 additions & 3 deletions stimupy/components/edges.py
@@ -1,4 +1,5 @@
import copy

import numpy as np

from stimupy.components import gaussians, image_base
Expand Down Expand Up @@ -49,9 +50,9 @@ def step_edge(
)

img = np.ones(shape) * intensity_edges[0]
img = np.where(base["rotated"] < base["rotated"].mean(), img, intensity_edges[1])
img = np.where(base["oblique"] < base["oblique"].mean(), img, intensity_edges[1])
mask = np.ones(shape)
mask = np.where(base["rotated"] < base["rotated"].mean(), mask, 2)
mask = np.where(base["oblique"] < base["oblique"].mean(), mask, 2)

stim = {
"img": img,
Expand Down Expand Up @@ -198,7 +199,7 @@ def cornsweet_edge(
if ramp_width > max(base["visual_size"]) / 2:
raise ValueError("ramp_width is too large")

dist = np.round(base["rotated"] / ramp_width, 6)
dist = np.round(base["oblique"] / ramp_width, 6)
d1 = copy.deepcopy(dist)
d2 = copy.deepcopy(dist) * (-1)
d1[d1 < 0] = -1
Expand Down
14 changes: 7 additions & 7 deletions stimupy/components/waves.py
Expand Up @@ -292,7 +292,7 @@ def sine(
distance_metric : str or None
if "horizontal", use distance from origin in x-direction,
if "vertical", use distance from origin in x-direction;
if "rotated", use combined and rotated distance from origin in x-y;
if "oblique", use combined and rotated distance from origin in x-y;
if "radial", use radial distance from origin,
if "angular", use angular distance from origin,
if "cityblock", use cityblock distance from origin
Expand All @@ -317,7 +317,7 @@ def sine(
if period is None:
period = "ignore"

distance_metrics = ["horizontal", "vertical", "rotated", "radial", "angular", "cityblock"]
distance_metrics = ["horizontal", "vertical", "oblique", "radial", "angular", "cityblock"]
if distance_metric not in distance_metrics:
raise ValueError(f"distance_metric needs to be one of {distance_metrics}")

Expand Down Expand Up @@ -505,7 +505,7 @@ def square(
distance_metric : str or None
if "horizontal", use distance from origin in x-direction,
if "vertical", use distance from origin in x-direction;
if "rotated", use combined and rotated distance from origin in x-y;
if "oblique", use combined and rotated distance from origin in x-y;
if "radial", use radial distance from origin,
if "angular", use angular distance from origin,
if "cityblock", use cityblock distance from origin
Expand Down Expand Up @@ -587,7 +587,7 @@ def staircase(
distance_metric : str or None
if "horizontal", use distance from origin in x-direction,
if "vertical", use distance from origin in x-direction;
if "rotated", use combined and rotated distance from origin in x-y;
if "oblique", use combined and rotated distance from origin in x-y;
if "radial", use radial distance from origin,
if "angular", use angular distance from origin,
if "cityblock", use cityblock distance from origin
Expand Down Expand Up @@ -719,21 +719,21 @@ def overview(**kwargs):
stimuli = {
"sine wave - horizontal": sine(**default_params, **grating_params, distance_metric="horizontal"),
"sine wave - vertical": sine(**default_params, **grating_params, distance_metric="vertical"),
"sine wave - oblique": sine(**default_params, **grating_params, distance_metric="rotated", rotation=30),
"sine wave - oblique": sine(**default_params, **grating_params, distance_metric="oblique", rotation=30),
"sine wave - radial": sine(**default_params, **grating_params, distance_metric="radial"),
"sine wave - angular": sine(**default_params, **grating_params, distance_metric="angular"),
"sine wave - cityblock": sine(**default_params, **grating_params, distance_metric="cityblock"),

"square wave - horizontal": square(**default_params, **grating_params, distance_metric="horizontal"),
"square wave - vertical": square(**default_params, **grating_params, distance_metric="vertical"),
"square wave - oblique": square(**default_params, **grating_params, distance_metric="rotated", rotation=30),
"square wave - oblique": square(**default_params, **grating_params, distance_metric="oblique", rotation=30),
"square wave - radial": square(**default_params, **grating_params, distance_metric="radial"),
"square wave - angular": square(**default_params, **grating_params, distance_metric="angular"),
"square wave - cityblock": square(**default_params, **grating_params, distance_metric="cityblock"),

"staircase - horizontal": staircase(**default_params, **grating_params, distance_metric="horizontal"),
"staircase - vertical": staircase(**default_params, **grating_params, distance_metric="vertical"),
"staircase - oblique": staircase(**default_params, **grating_params, distance_metric="rotated", rotation=30),
"staircase - oblique": staircase(**default_params, **grating_params, distance_metric="oblique", rotation=30),
"staircase - radial": staircase(**default_params, **grating_params, distance_metric="radial"),
"staircase - angular": staircase(**default_params, **grating_params, distance_metric="angular"),
"staircase - cityblock": staircase(**default_params, **grating_params, distance_metric="cityblock"),
Expand Down
8 changes: 4 additions & 4 deletions stimupy/stimuli/checkerboards.py
Expand Up @@ -209,7 +209,7 @@ def checkerboard(
intensities=intensity_checks,
origin="corner",
round_phase_width=round_phase_width,
distance_metric="rotated",
distance_metric="oblique",
)

sw2 = waves.square(
Expand All @@ -225,7 +225,7 @@ def checkerboard(
intensities=intensity_checks,
origin="corner",
round_phase_width=round_phase_width,
distance_metric="rotated",
distance_metric="oblique",
)

# If neither a visual_size nor a shape was given, each square wave
Expand All @@ -246,7 +246,7 @@ def checkerboard(
intensities=intensity_checks,
origin="corner",
round_phase_width=round_phase_width,
distance_metric="rotated",
distance_metric="oblique",
)

sw2 = waves.square(
Expand All @@ -262,7 +262,7 @@ def checkerboard(
intensities=intensity_checks,
origin="corner",
round_phase_width=round_phase_width,
distance_metric="rotated",
distance_metric="oblique",
)
warnings.filterwarnings("default")

Expand Down
2 changes: 1 addition & 1 deletion stimupy/stimuli/gabors.py
Expand Up @@ -72,7 +72,7 @@ def gabor(
phase_shift=phase_shift,
intensities=intensities,
origin=origin,
distance_metric="rotated",
distance_metric="oblique",
round_phase_width=round_phase_width,
)

Expand Down
2 changes: 1 addition & 1 deletion stimupy/stimuli/plaids.py
Expand Up @@ -84,7 +84,7 @@ def overview(**kwargs):
"ppd": 10,
"origin": "center",
"phase_shift": 30,
"distance_metric": "rotated",
"distance_metric": "oblique",
}
default_params.update(kwargs)

Expand Down
4 changes: 2 additions & 2 deletions stimupy/stimuli/waves.py
Expand Up @@ -118,7 +118,7 @@ def sine_linear(
elif rotation % 180 == 90.0:
distance_metric = "vertical"
else:
distance_metric = "rotated"
distance_metric = "oblique"

# Spatial square-wave grating
stim = waves.sine(
Expand Down Expand Up @@ -233,7 +233,7 @@ def square_linear(
phase_shift=phase_shift,
origin=origin,
round_phase_width=round_phase_width,
distance_metric="rotated",
distance_metric="oblique",
)

# Adjust intensities to passed-in values
Expand Down

0 comments on commit 4eec2de

Please sign in to comment.