View Single Post
  #1  
Old 10-31-2011, 09:54 AM
new_horizon new_horizon is offline
Member
 
Join Date: Apr 2010
Posts: 43
TypeError: only length-1 arrays can be converted to Python scalars

Hi All,

I will not paste my code here as it is extremely long, but I have included a snippet where the error is appearing.

TypeError: only length-1 arrays can be converted to Python scalars

Code:
# ----------------------------------------------#
#      MAIN LOOP ANIMATING THE OBJECTS          #
# ----------------------------------------------#

def animate():
	global rng,plgit, mlgit,prob_N, nv, trialsplt,nv_p,sgn,sgn_p,reverse, X_motion,Obs_rotn, L_inc,Min_loom,Obj_sz,Obj_scale, displaytime, Z_dist,Z_far, Speed
	global Vert_screen, Aspect, Z_observer, pixelcm, pixeldg,Lpixels,selectM, Dummycar, Pedestrian, condition, male, female, vehicle_endpos, pedestrian_endpos
	from calc_reversals import *
	stim=0
	falsep = 0
	falserate = 0
	nulltrials = 0
	nv[0] = 999; nv[1] = 999 ; R = 1  # Set up for 2FC
	trialtype = [0,1,1,1]  # use to specify ratio of dummy trials [0] to test trials
	# Also use to set movement to zero or 1*scaling
	Motion_conditions = [0,1]
	for tr in range(0, 2*(ntrials-1)):
		object1 = vehicles[tr]
		if Motion_conditions == 0:
			object1 = vehicle0
		if Motion_conditions ==1:
			object1 = vehicle1
		import random
		Condition = 0; Dummycar = 0; Pedestrian = 0
		random.shuffle(Motion_conditions)
		random.shuffle(trialtype)
		on_off = trialtype[1]
#### NEW NEW
		probe = Motion_conditions[0]
		# Check if that PEST has already completed reversals and switch to other one if it has
		if trial_ch[probe]< 0 :
			print 'Series:',probe,'has completed, switching to:', Motion_conditions[1]
			probe = Motion_conditions[1]
		local_motion = probe
#### END of NEW
		print 'Trial:',tr, 'Stimulus:', nv, 'set to:',probe*nv[probe]
		Loom_level = Min_loom+nv[probe]*L_inc
		Lpixels = 57.3*pixeldg*Loom_level
		if on_off == 1 and nv_p[probe] > nv[probe]:
			Loom_level = Min_loom+nv_p[probe]*L_inc # use previous distance setting for null trials
			if nv_p[probe] == 0:
				Loom_level = Min_loom # if reached zero point set to 1 inc above
		Z_dist = Obj_sz/(Loom_level*TTC)
#		if selectc <2 :
#			if Z_dist > Z_far:
#				Z_dist = Z_far-5  # max setting for cars
#		if selectc == 2 :
#			if Z_dist > 500:
#				Z_dist = 500  # max setting for balls
		view.goto(xobs,yobs,Z_observer-zobs,0.01,viz.TIME)
#
	# Reset object position & scale 
#		object1.setPosition(0,0,Z_dist-zobs)
		object1.setScale(Obj_scale[0],Obj_scale[1],1)
		Speed = Obj_sz/(Loom_level*TTC*TTC)
		screencms = 100*Obj_scale[0]*Z_observer/(Z_dist+Z_observer)
		Opixels = pixelcm*screencms
		KPH = 3600*Speed/1000
		Angular_size_start = math.atan(Obj_sz/Z_dist)*57.2957795
		theta_start = math.atan(Obj_sz/Z_dist)
		Angular_size_end = (theta_start + Loom_level*displaytime)*57.2957795
		Loom_level_degrees = Loom_level*57.2957795
#
		if local_motion ==1:
			print 'LOCAL MOTION with on_off =',on_off
		if local_motion ==0:	
			print 'STATIC DISTRACTION with on_off =',on_off
		#	
		if on_off > 0:
			print 'Kph:', round(KPH,1),'m/s:',round(Speed,1), 'Dist:', round(Z_dist,1), 'Loom(deg):', round(57.3*Loom_level,4), 'Pixels:', round(Lpixels,1), 'Size Start', round(Angular_size_start,4), 'Size End', round(Angular_size_end,4)
		if on_off == 0:
			print 'Dist:', round(Z_dist,1), 'Loom:', 0
		updatelabel(probe,nv[probe]*on_off,reverse[probe],falserate)
		yield viztask.waitMouseDown(viz.MOUSEBUTTON_LEFT)
		view.setEuler(0,0,0, 0.01, viz.TIME)
		yield viztask.waitTime(1.0) # wait before dummy motion begins
		#
		if local_motion ==1:
			move_with_local_motion(on_off,Loom_level)
		if local_motion ==0:	
			move_with_static_distractors(on_off,Loom_level)
		#	
		yield viztask.waitTime(0.3) # wait before removing
		vehicledummy1.visible(viz.OFF), object1.visible(viz.OFF), vehicledummy3.visible(viz.OFF), male.visible(viz.OFF), vehicledummy4.visible(viz.OFF)
		yield viztask.waitTime(0.5) # wait before prompt
		grid.visible(viz.ON)
		zone1button.visible(viz.ON)
		zone2button.visible(viz.ON)
		zone3button.visible(viz.ON)
		zone4button.visible(viz.ON)
		zone5button.visible(viz.ON)
		nonebutton.visible(viz.ON)
		yield viztask.waitAny( [ viztask.waitButtonDown(zone1button),viztask.waitButtonDown(zone2button),viztask.waitButtonDown(zone3button),viztask.waitButtonDown(zone4button),viztask.waitButtonDown(zone5button),viztask.waitButtonDown(nonebutton)]) 
		m_pos1 = viz.mouse.getPosition()
		yield viztask.waitAny( [ viztask.waitButtonDown(zone1button),viztask.waitButtonDown(zone2button),viztask.waitButtonDown(zone3button),viztask.waitButtonDown(zone4button),viztask.waitButtonDown(zone5button),viztask.waitButtonDown(nonebutton)]) 
		m_pos2 = viz.mouse.getPosition()
		yield viztask.waitAny( [ viztask.waitButtonDown(zone1button),viztask.waitButtonDown(zone2button),viztask.waitButtonDown(zone3button),viztask.waitButtonDown(zone4button),viztask.waitButtonDown(zone5button),viztask.waitButtonDown(nonebutton)]) 
		m_pos3 = viz.mouse.getPosition()
		print m_pos1, m_pos2, m_pos3
#		m_position = [m_pos1,m_pos2,m_pos3]
		mpos = 0
		if m_pos1[0] > 0.4 and m_pos1[0] < 0.6 and m_pos1[1] > 0.1:
			mpos = 1
		if m_pos2[0] > 0.4 and m_pos2[0] < 0.6 and m_pos2[1] > 0.1:
			mpos = 1
		if m_pos3[0] > 0.4 and m_pos3[0] < 0.6 and m_pos3[1] > 0.1:
			mpos = 1
#		mousepress = viz.ask('Where were the objects that moved towards you?')
		grid.visible(viz.OFF)
		zone1button.visible(viz.OFF)
		zone2button.visible(viz.OFF)
		zone3button.visible(viz.OFF)
		zone4button.visible(viz.OFF)
		zone5button.visible(viz.OFF)
		nonebutton.visible(viz.OFF)
### MOVE THIS section to after
		if on_off == 1:
			stim=nv[probe]
			R = mpos
			prob_calc_N(R,probe,rng,plgit, mlgit,prob_N, nv,dbrng) # should be using last valid nv[0] & R for next nv[0]
			calc_reversals(probe,trialsprb, reverse, nv, nv_p, sgn_p, rng)
			print 'Reversals: ', reverse[probe]
			print '--NEXT--'
		if on_off == 0:
			stim = 0
			nulltrials = nulltrials + 1
			if mpos == 1:
				falsep = falsep+1
			falserate = 100*falsep/nulltrials
		response1 = 0 # No Motion
		response2 = 0 # Car
		response3 = 0 # Pedestrian
		#  Zone 1 = x 0-0.2
		#  Zone 2 = x 0.2-0.4
		#  Zone 3 = x 0.4-0.6
		#  Zone 4 = x 0.6-0.8
		#  Zone 5 = x 0.8-1.0
		#  None Button = x 0.4-0.6 and y 0-0.1
		#  1 = No Motion; 2 = Car; 3 = Pedestrian
		NB = 0
		zone1 = 0
		zone2 = 0
		zone3 = 0
		zone4 = 0
		zone5 = 0
		if m_pos1[0] > 0.4 and m_pos1[0] < 0.6 and m_pos1[1] > 0.1:
			zone3 = 1
		if m_pos2[0] > 0.4 and m_pos2[0] < 0.6 and m_pos2[1] > 0.1:
			zone3 = 1
		if m_pos3[0] > 0.4 and m_pos3[0] < 0.6 and m_pos3[1] > 0.1:
			zone3 = 1
		if m_pos1[0] > 0.4 and m_pos1[0] < 0.6 and m_pos1[1] < 0.1:
			NB = 1
		if m_pos2[0] > 0.4 and m_pos2[0] < 0.6 and m_pos2[1] < 0.1:
			NB = 1
		if m_pos3[0] > 0.4 and m_pos3[0] < 0.6 and m_pos3[1] < 0.1:
			NB = 1
		if m_pos1[0] > 0.2 and m_pos1[0] < 0.4:
			zone2 = 1
		if m_pos2[0] > 0.2 and m_pos2[0] < 0.4:
			zone2 = 1
		if m_pos3[0] > 0.2 and m_pos3[0] < 0.4:
			zone2 = 1
		if m_pos1[0] > 0.6 and m_pos1[0] < 0.8:
			zone4 = 1
		if m_pos2[0] > 0.6 and m_pos2[0] < 0.8:
			zone4 = 1
		if m_pos3[0] > 0.6 and m_pos3[0] < 0.8:
			zone4 = 1
		if m_pos1[0] > 0.0 and m_pos3[0] < 0.2:
			zone1 = 1
		if m_pos2[0] > 0.0 and m_pos3[0] < 0.2:
			zone1 = 1
		if m_pos3[0] > 0.0 and m_pos3[0] < 0.2:
			zone1 = 1
		if m_pos1[0] > 0.8 and m_pos3[0] < 1.0:
			zone5 = 1
		if m_pos2[0] > 0.8 and m_pos3[0] < 1.0:
			zone5 = 1
		if m_pos3[0] > 0.8 and m_pos3[0] < 1.0:
			zone5 = 1
		print 'Trial:',tr,'Reversals: ', reverse[probe], 'False pos rate:', falserate, 'Probe:', probe, 'Mpos:', mpos, 'Condition', Condition, 'DummyCar', Dummycar, 'Pedestrian', Pedestrian, 'Zone1', zone1, 'Zone2', zone2, 'Zone3', zone3, 'Zone4', zone4, 'Zone5', zone5, 'NoneButton', NB
		print '--NEXT--'
	#		yield viztask.ButtonDown(nonebutton) 
		res[tr,0] = tr; res[tr,1]= stim; res[tr,2] = mpos; res[tr,3] = reverse[probe] 
		SaveData(tr, stim, local_motion, reverse[probe], on_off, mpos, probe, Dummycar, vehicle_endpos, Pedestrian, pedestrian_endpos, zone1, zone2, zone3, zone4, zone5, NB, falserate,Loom_level,Loom_level_degrees, Lpixels,KPH,Speed, Z_dist,Z_observer,Angular_size_start, Angular_size_end )
		updatelabel(probe,stim,reverse,falserate)
#########  NEW NEW NEW ################
	#  THIS CHECKS IF MAX REVERSALS HAVE BEEN REACHED FOR ANY SERIES 
		if reverse[probe]>maxreversals:
			trial_ch[probe] = -1
			# this will allow all future selections of this series to be skipped
			###  NOTE ADD IN AN ADDITIONAL SAVE OF VARIABLES at end of PEST to save the NEXT nv variable = MLE
			SaveData(tr, nv[probe], local_motion, reverse[probe], on_off, mpos, probe, 999, 999, 999, 999, 999, 999, 999, 999, 999, 999, falserate,999,999, 999,999,999, 999,999,999,999 )
		checktotal=sum(trial_ch)
		print checktotal
		# This checks if the max has been reached for all series
		if checktotal <= -Npest :
			break	
#########  NEW NEW NEW ################

# ----------------------------------------------#
#      END OF THE PEST PROCEDURE                #
# ----------------------------------------------#
Can anyone provide any advice as to what "TypeError: only length-1 arrays can be converted to Python scalars" is referring to?

Best wishes,

Mark
Reply With Quote