Exemple #1
0
class GratingStimulus(StimulusBase):
    """Simple sine grating stimulus."""

    def __init__(self, shared,
                 lam=10.0, vel=10.0, c_high=255, c_low=0, color=(1.0, 1.0, 1.0)):
        StimulusBase.__init__(self, shared)

        # Parameters:

        self.param_lambda = lam  # cm
        self.param_velocity = vel  # cm/s
        self.param_c_high = c_high
        self.param_c_low = c_low
        self.param_color = np.array(color)

        # Set up simple image with grating:
        c1, c2 = self.param_color * self.param_c_low, self.param_color * self.param_c_high
        self.texture_grating = create_striped_texture(c1, c2, nearest=True)
        self.image_grating = OnscreenImage(self.texture_grating,
                                           pos=(0, 0, 0),
                                           scale=(self.getAspectRatio(), 1.0, 1.0),
                                           hpr=(0, 0, 0))

        self.image_grating.setTexOffset(TextureStage.getDefault(), 0.0, 0.0)
        self.image_grating.setTexScale(TextureStage.getDefault(), self.calibrated_length / self.param_lambda)

    def update_stimulus(self, frame_number, time):
        offset = (self.param_velocity * time) / self.param_lambda % 1
        self.image_grating.setTexOffset(TextureStage.getDefault(), offset, 0.0)