Index: /fact/tools/PyDimCtrl/factdimserver.py
===================================================================
--- /fact/tools/PyDimCtrl/factdimserver.py	(revision 13808)
+++ /fact/tools/PyDimCtrl/factdimserver.py	(revision 13809)
@@ -58,7 +58,6 @@
             *returns* numeric state code, parsed from return of self.state()
         """
-        if hasattr(self, 'state'):
-            s = self.state()[0]
-            return int(s[ s.find('[')+1 : s.find(']') ])
+        if hasattr(self, 'stn'):
+            return self.stn
         else:
             raise TypeError(self.name+' has no CMD called STATE')
@@ -72,5 +71,5 @@
         """
 
-        if not hasattr(self, 'state'):
+        if not hasattr(self, 'stn'):
             raise TypeError(self.name+' has no CMD called STATE')
         if timeout == None:
@@ -79,5 +78,5 @@
             timeout = float(timeout)
         start = time.time()
-        while not self() == state_num:
+        while not self.stn == state_num:
             time.sleep(0.1)
             if time.time() >= start+timeout:
@@ -316,5 +315,5 @@
     globals()[server_name.lower()] = new_instance
 del new_instance
-
+del i
 ##############################################################################
 # class for colored printing
Index: /fact/tools/PyDimCtrl/pyfactctrl.py
===================================================================
--- /fact/tools/PyDimCtrl/pyfactctrl.py	(revision 13808)
+++ /fact/tools/PyDimCtrl/pyfactctrl.py	(revision 13809)
@@ -1,6 +1,4 @@
 #!/usr/bin/python -tti
-from fpydim import *
-
-
+from factdimserver import *
 
 def IsReadyForDataTaking( verbose = True ):
@@ -14,16 +12,28 @@
 
     ok = True
-    if not drive() == 7:
-        msg.warn( drive.state()[0] + "  NOT ok")
+    if not drive.stn == 7:
+        msg.warn(drive.name + ':' + drive.sts + "  NOT ok")
         ok = False
-    if not feedback() == 12:
-        msg.warn( feedback.state()[0] + "  NOT ok")
+    else:
+        msg.ok(drive.name + ':' + drive.sts + "      OK")
+
+    if not feedback.stn == 12:
+        msg.warn(feedback.name +':'+ feedback.sts + "  NOT ok")
         ok = False
-    if not bias() == 9:
-        msg.warn( bias.state()[0] + "  NOT ok")
+    else:
+        msg.ok(feedback.name +':'+ feedback.sts + "      OK")
+
+    if not bias.stn == 9:
+        msg.warn(bias.name +':'+  bias.sts + "  NOT ok")
         ok = False
-    if not fad() == 4:
-        msg.warn( fad.state()[0] + "  NOT ok")
+    else:
+        msg.ok(bias.name +':'+  bias.sts + "      OK")
+
+    if not fad.stn == 4:
+        msg.warn(fad.name +':'+ fad.sts + "  NOT ok")
         ok = False
+    else:
+        msg.ok(fad.name +':'+ fad.sts + "        ok")
+        
     
     if ok:
@@ -67,36 +77,42 @@
 def TrackSource( Shift=0.6, Angle=50, SrcName='Crab', verbose=True):
     drive = drive_control
-    
-    msg = MSG()
-    msg.output = verbose
-
-    if not drive.wait(5, 10):
-        msg.warn("drive not ready after 10sec")
-        msg.warn( drive.state()[0].rstrip('\x00') )
-        return False
-
+    msg = MSG( verbose )
     SrcName += '\0'
+
+    timeout  = 3
+    starttime = time.time()
+    while not drive.stn == 5:
+        if time.time() - starttime > timeout:
+            msg.fail('Did not get DRIVE into Armed state')
+            return False
+
+        if drive.stn < 5:
+            msg.fail('DRIVE in state'+drive.sts+" I don't what to do.")
+        if drive.stn >= 256:
+            msg.fail('DRIVE in state'+drive.sts+" I don't what to do.")
+
+        if drive.stn in [6,7]:
+            drive.stop()
+           time.sleep(0.5)
+
     drive.track_source( Shift, Angle, SrcName)
-    
     return True
 
 def WaitForTracking( CalmDownTime = 30, verbose = True):
     drive = drive_control
-
-    msg = MSG()
-    msg.output = verbose
-
-    if not drive.wait(6, 10):
-        msg.warn("drive not in state moving after 10sec")
-        return False
-
-    if not drive.wait(7, 10):
-        msg.warn("drive not in state Tracking after 10sec")
-        return False
-
-    msg("waiting "+str(CalmDownTime)\
-            +"sec for drive to calm down and tracking to be stable")
+    msg = MSG(verbose)
+
+    starttime = time.time()
+    time_out = 10
+
+    while not drive.stn == 7: #Tracking
+        if time.time() - starttime > time_out:
+            msg.fail("DRIVE not in Tracking after Timeout")
+            return False
+
+    msg.ok("Drive is Tracking, waiting to calm down...")
     time.sleep(CalmDownTime)
     return True
+
 def TakePedestalOnRun( verbose = True ):
     msg = MSG()
@@ -144,6 +160,5 @@
 
 def Take( time=0, events=0, runtype='drs-pedestal', verbose=True):
-    msg = MSG()
-    msg.output = verbose
+    msg = MSG( verbose )
     fad = fad_control
     runtype += '\0'
@@ -163,4 +178,29 @@
     return True
 
+def Take1218( verbose = True):
+
+    TrackSource( Shift=0.6, Angle=-5, SrcName='1ES 1218+304')
+    WaitForTracking( CalmDownTime = 45, verbose = True)
+
+    TakeDrsAmplitudeCalibration( roi=1024 )
+    TakeDrsTimeCalibration( mode='upshifted' )
+    TakeDrsAmplitudeCalibration( roi=300 )
+
+    VoltageOn( mode='current' )
+    for i in range(4):
+        msg("Taking Data Run "+str(i+1)+" of 4")
+        TakeDataRun()
+    VoltageOff()
+
+    TrackSource( Shift=0.6, Angle=175, SrcName='1ES 1218+304')
+    WaitForTracking( CalmDownTime = 45, verbose = True)
+
+    VoltageOn( mode='current' )
+    for i in range(4):
+        msg("Taking Data Run "+str(i+1)+" of 4")
+        TakeDataRun()
+    VoltageOff()
+
+    drive_control.stop()
 
 def BlinkenLights(verbose = True):
@@ -277,27 +317,27 @@
             else:
             # there might be a problem with one of the boards
-            conns = map( ord, fad.connections()[0] )
-            problems = {}
-            for fad,conn in enumerate(conns):
-                if conn < 255:
-                    print "FAD:", fad, "has a problem"
-                    if not fad/10 in problems:
-                        problems[fad/10] = []
-                    else:
-                        problems[fad/10].append( fad%10 )
+                conns = map( ord, fad.connections()[0] )
+                problems = {}
+                for fad,conn in enumerate(conns):
+                    if conn < 255:
+                        print "FAD:", fad, "has a problem"
+                        if not fad/10 in problems:
+                            problems[fad/10] = []
+                        else:
+                            problems[fad/10].append( fad%10 )
             
-            for fad in range(10):
+                for fad in range(10):
+                    for crate in problems.keys():
+                        fad.disconnect(crate*10+fad)
+                        ftm.toggle_ftu(crate*10+fad)
                 for crate in problems.keys():
-                    fad.disconnect(crate*10+fad)
-                    ftm.toggle_ftu(crate*10+fad)
-            for crate in problems.keys():
-                time.sleep(1)
-                ftm.reset_crate(crate)
+                    time.sleep(1)
+                    ftm.reset_crate(crate)
                 
-            for fad in range(10):
-                for crate in problems.keys():
-                    time.sleep(3.5)
-                    fad.connect(crate*10+fad)
-                    ftm.toggle_ftu(crate*10+fad)
+                for fad in range(10):
+                    for crate in problems.keys():
+                        time.sleep(3.5)
+                        fad.connect(crate*10+fad)
+                        ftm.toggle_ftu(crate*10+fad)
         
         elif fad.stn == 5: # Configuring1
@@ -508,6 +548,4 @@
         raise ValueError("mode must be 'temperature', 'current' or 'feedback'")
     
-    feedback.start(..... blaaaaa .....)
-    hier muss noch ne menge passieren
     
     bias.set_global_dac(1)
@@ -526,5 +564,5 @@
     return True
 
-# standard watchdogs:
+# standard watchdog:
 def std_bias_watchdog( state, verbose=True ):
     msg = MSG(verbose)
