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)