Index: fact/tools/PyDimCtrl/bias_current.py
===================================================================
--- fact/tools/PyDimCtrl/bias_current.py	(revision 14254)
+++ fact/tools/PyDimCtrl/bias_current.py	(revision 14254)
@@ -0,0 +1,32 @@
+#!/usr/bin/python -tti
+from factdimserver import *
+import numpy as np
+import sys
+
+cali = feedback.calibration()
+avg = np.array(cali[0:320])
+rms = np.array(cali[416:416+320])
+r = np.array(cali[2*416:2*416+320])
+
+bias = bias_control
+
+I = np.array(bias.current()[0:320], dtype=float)
+II = I/4096. * 5000
+V = np.array(bias.voltage()[0:320])
+if len(sys.argv) > 1:
+    i = int(sys.argv[1])
+else: i=0
+print 'I:', I[i], 'dac\t', II[i], 'uA'
+print 'V:', V[i]
+print ''
+print 'GUI offset:', V[i]/r[i]*1e6
+print 'GUI feedback:', II[0] - V[0]/r[0]*1e6
+
+GUII = II-V/r*1e6
+
+print 'median', np.median(GUII)
+print 'mean', GUII.mean()
+print 'rms', ((GUII- GUII.mean())**2).sum()
+print 'std', GUII.std()
+print 'max', GUII.max()
+print 'min', GUII.min()
Index: fact/tools/PyDimCtrl/factdimserver.py
===================================================================
--- fact/tools/PyDimCtrl/factdimserver.py	(revision 14253)
+++ fact/tools/PyDimCtrl/factdimserver.py	(revision 14254)
@@ -185,5 +185,12 @@
 # and since _get() has a return value, this return value is vorwarded to the user
 def add_getter(cls, name): 
-    meth_name = name.split('/')[1].lower()
+    meth_name = name.split('/')
+    if len(meth_name) > 1:
+        meth_name = meth_name[1].lower()
+    elif len(meth_name) >0:
+        meth_name = meth_name[0].lower()
+    else:
+        print 'add_getter, cannot parse name:', name
+        raise ValueError('read above')
     if iskeyword(meth_name):
         meth_name += '_cmd'
@@ -247,5 +254,6 @@
         # sl_raw is a tuple, with an really long string, which needs to be parsed
         sl_raw = pydim.dic_sync_info_service(server+'/SERVICE_LIST','C')[0]
-        
+#        print server
+#        print sl_raw
         # even without parsing, I can find out, if this server also gives me a 
         # service description list. In case it does not, this is fine as well
@@ -281,4 +289,6 @@
         for d_str in sd:
             service,equalsign,desc = d_str.partition('=')
+            if not '/' in service:
+                service = server+'/'+service
             #if '=' != equalsign:
                 # print "Error: server:", server, "desc:", d_str
@@ -309,9 +319,16 @@
             types.ClassType( server_name, (FactDimServer,), {}) )
     for cmd in services[server_name]:
+        cmdname = cmd.split('/')
+        if len(cmdname) > 1:
+            cmdname = cmdname[1]
+        elif len(cmdname) >0:
+            cmdname = cmdname[0]
+            cmd = server_name+'/'+cmdname
+        else:
+            print server_name, cmd
+            raise ValueError('was not able to parse service/command names')
         if 'CMD' in services[server_name][cmd][1]:
-            cmdname = cmd.split('/')[1]
             add_command(FactDimServerClasses[-1], cmd)
         elif not services[server_name][cmd][1]:
-            cmdname = cmd.split('/')[1]
             add_getter(FactDimServerClasses[-1], cmd)
 
