# Adding Function to Field Calculator fails

696
2
07-29-2011 03:56 AM
by
New Contributor
I'm new to the forum, so: Hello Everybody!

I'm trying to add a def function to ArcGIS Desktops Field Calculator.

The code of the def written in python is as follows:

```import arcpy
import math
import numpy
from arcpy import env
from numpy import *

pointshape = arcpy.GetParameterAsText (0)
raster = arcpy.GetParameterAsText (1)
solar_azimuth = arcpy.GetParameterAsText (2)
solar_height = arcpy.GetParameterAsText (3)
tilt = arcpy.GetParameterAsText (4)
output_raster = arcpy.GetParameterAsText (5)

def calculate_angles(ET_ANGLE):
#Calculating IN-Vector

r = 1
x = -(r * math.sin(theta_in) * math.cos(phi_in))
y = -(r * math.sin(theta_in) * math.sin(phi_in))
z = -(r * math.cos(theta_in))

VSonneIn = numpy.matrix([, , ])

# Calculating Module-Vector

# r = 1 from above
u = r * math.sin(theta_modul) * math.cos(phi_modul)
v = r * math.sin(theta_modul) * math.sin(phi_modul)
w = r * math.cos(theta_modul)

# Defining Transformation-Matrix

MReflexion = numpy.matrix([[1-2*u*u, -2*u*v, -2*u*w],
[-2*u*v, 1-2*v*v, -2*v*w],
[-2*u*w, -2*v*w, 1-2*w*w]])

VSonneOut = MReflexion * VSonneIn

# Calculating OUT-Angles

theta_out = math.degrees(math.acos(VSonneOut[2]/(math.sqrt(VSonneOut[0]*VSonneOut[0]+VSonneOut[1]*VSonneOut[1]+VSonneOut[2]*VSonneOut[2]))))

VERT1 = (90 - theta_out)
return VERT1

if (VSonneOut[0] > 0):
phi_out = math.degrees(math.atan(VSonneOut[1]/VSonneOut[0]))
elif (VSonneOut[0] == 0):
phi_out = math.degrees(numpy.sign(VSonneOut[1])*(math.pi/2))
elif (VSonneOut[1] >= 0):
phi_out = math.degrees(math.atan(VSonneOut[1]/VSonneOut[0])+math.pi)
else:
phi_out = math.degrees(math.atan(VSonneOut[1]/VSonneOut[0])-math.pi)

AZIMUTH1 = (180 - phi_out)
return AZIMUTH1```

The expression I use in the Field Calculator is as follows:

`calculate_angles(!ET_ANGLE!)`

Now my problem is, that this def doesn't work. The Error message I get is not defined.
-> <class 'arcgisscripting.ExecuteError'>: ERROR 999999: Error executing function.
Failed to execute (CalculateField).

Any Idea how to debug this or how to get it to work?
I'm not getting it.

Thanks for any help!
Tags (3)
2 Replies
MVP Legendary Contributor
by the looks of the script, it is designed to run as a tool from within Arctoolbox, within Arcmap, since there are a number of parameters that need to be provided, which aren't being provided from within the field calculator.  Check the documentation that you got with the toolset if you have it
by
New Contributor
by the looks of the script, it is designed to run as a tool from within Arctoolbox, within Arcmap

That's right.

there are a number of parameters that need to be provided, which aren't being provided from within the field calculator

Could you please name some of them? I don't know to which you are referring to.

the documentation that you got with the toolset

With 'Toolset' you mean the 'Field Calculator'? I Don't have a documentation for the Toolset the script should run in, because I've created it by my own.

Thanks for your Help so far!