#!/usr/bin/env python
#rotate flashing wedge
from psychopy import core, visual, event, gui

from numpy import linspace, floor

myMonitorName = 'PeterMonitor'

myAngularCycles=16.0
cycleDuration = 72.0 #secs for full cycle
nCycles = 4

globalClock = core.Clock()
win = visual.Window([1024,768], allowGUI=False, units='deg', monitor=myMonitorName, fullscr=True, waitBlanking=True)
#make two wedges (in opposite contrast) and alternate them for flashing
wedge1 = visual.RadialStim(win, tex='sqrXsqr', color=1,size=30, 
     radialCycles=4, angularCycles=myAngularCycles, interpolate=False,
    autoLog=False, ori=360.0/64,angularRes=128)#this stim changes too much for autologging to be useful

wedge2 = visual.RadialStim(win, tex='sqrXsqr', color=-1,size=30, 
    radialCycles=4, angularCycles=myAngularCycles, interpolate=False,
    autoLog=False, ori=360.0/64,angularRes=128)#this stim changes too much for autologging to be useful

mask1= visual.RadialStim(win, tex='sqrXsqr', color=0,size=31, 
    radialCycles=0, angularCycles=0, interpolate=False, visibleWedge=[0,135],
    autoLog=False, ori=0,angularRes=128)#this stim changes too much for autologging to be useful

mask2 = visual.RadialStim(win, tex='sqrXsqr', color=0,size=31, 
    radialCycles=0, angularCycles=0, interpolate=False, visibleWedge=[180, 315],
    autoLog=False, ori=0,angularRes=128)#this stim changes too much for autologging to be useful

maskHemiR = visual.RadialStim(win, tex='sqrXsqr', color=0,size=31, 
    radialCycles=0, angularCycles=0, interpolate=False, visibleWedge=[180, 360],
    autoLog=False, ori=0, angularRes=360)#this stim changes too much for autologging to be useful

maskHemiL = visual.RadialStim(win, tex='sqrXsqr', color=0,size=31, 
    radialCycles=0, angularCycles=0, interpolate=False, visibleWedge=[0,180],
    autoLog=False, ori=0, angularRes=360)#this stim changes too much for autologging to be useful

# l or r masked?
maskHemiR.setAutoDraw(1)

# fixation - large x covering the spanning the whole screen (good for people with low foveal vision)
fixNVertices2 = [[-1,-1],[1,1]]
fixNVertices1 = [[-1,1],[1,-1]]
#red line top left to bottom right
largeFixn1 = visual.ShapeStim(win, units ='norm',
                 lineColor='red',
                 lineWidth=5.0, 
                 fillColor=None, 
                 vertices=fixNVertices1,
                 closeShape=False,
                 pos= [0,0], 
                 interpolate=False,
                 opacity=1.0,
                 autoLog=False)

#red line bottom left to tpp right
largeFixn2 = visual.ShapeStim(win, units ='norm',
                 lineColor='red',
                 lineWidth=5.0, 
                 fillColor=None, 
                 vertices=fixNVertices2,
                 closeShape=False,
                 pos= [0,0], 
                 interpolate=False,
                 opacity=1.0,
                 autoLog=False)


largeFixn1.setAutoDraw(1)
largeFixn2.setAutoDraw(1)

rotationRate = 0.00 #revs per sec
flashPeriod = 0.16 #seconds for one B-W cycle (ie 1/Hz)

stepTimes = linspace(0, cycleDuration, myAngularCycles*2+1)
stepTimes = stepTimes[1:]

#wait for button press to start
import time
myGo = 0

while myGo == 0:
    for keys in event.getKeys():
        if keys in ['space']:
            myGo = 1
        else:
            time.sleep(0.01)

largeFixn1.draw()
largeFixn2.draw()
win.flip()
#dummy vols
time.sleep(12)


t=0
globalClock.reset()
newOri=45

for i in range(nCycles):
    cycleClock = globalClock.getTime()
    print cycleClock
    for j in range(len(stepTimes)):
        mask1.setOri(newOri)
        mask2.setOri(newOri)
        
        while globalClock.getTime()-cycleClock < stepTimes[j]:
            
            for i in range(6):
                wedge1.draw()
                mask1.draw()
                mask2.draw()
                largeFixn1.draw()
                largeFixn2.draw()
                win.flip()
                
            for i in range(6):
                wedge2.draw()
                mask1.draw()
                mask2.draw()
                largeFixn1.draw()
                largeFixn2.draw()
                win.flip()
        newOri += 360/(myAngularCycles*2)

        #handle key presses each frame
        for key in event.getKeys():
            if key in ['escape','q']:
                win.close()
                core.quit()

        
print globalClock.getTime()
win.close()