Index: fact/tools/PyDimCtrl/ScriptsForPyDimCtrl.py
===================================================================
--- fact/tools/PyDimCtrl/ScriptsForPyDimCtrl.py	(revision 14454)
+++ fact/tools/PyDimCtrl/ScriptsForPyDimCtrl.py	(revision 14455)
@@ -4,4 +4,5 @@
 from factdimserver import *
 import numpy as np
+import types
 
 last_drive_kwargs = {}
@@ -9,4 +10,26 @@
 
 bias_calibration = {}
+
+def wait_nice(self, state_num, timeout=None):                            
+  if not hasattr(self, 'stn'):
+    raise TypeError(self.name+' has no CMD called STATE')
+  if timeout == None:
+    timeout = float('inf')
+  else:
+    timeout = float(timeout)
+  start = time.time()
+  intermed = time.time()-1.
+  while not self.stn == state_num:
+    time.sleep(0.1)
+    if time.time() - intermed >= 1.:
+      print fad_control.events()[0], 'events @', ftm_control.trigger_rates()[3], 'Hz'
+      intermed = time.time()
+    
+    if time.time() >= start+timeout:
+      return False
+  return True
+
+fad_control.wait_nice = types.MethodType( wait_nice, fad_control) 
+
 
 def FadConnectCrate( crate ):
@@ -441,39 +464,4 @@
   print 'data taking for Wobble 2 finished'
   print '--------------------------------------'
-
-def TakeCrab():
-  """ Data taking and tracking script for Crab
-  """
-  print '======================================'
-  print 'Data taking and tracking script for'
-  print 'Crab'
-  print '======================================'
-  print 'starting up...'
-
-  # changing tracking to Crab Wobble 1
-  TrackCrabWobble1()
-
-  # Wait for drivectrl to reply that its tracking the given source
-  WaitForTracking()
-
-  DataTaking1()
-
-  # changing tracking to Crab Wobble 2
-  TrackCrabWobble2()
-
-  # Wait for drivectrl to reply that its tracking the given source
-  WaitForTracking()
-
-  # data taking to Crab Wobble 2
-  DataTaking2()
-
-  # Stop tracking
-  StopTracking()
-
-  print '======================================'
-  print 'Data taking and tracking script for'
-  print 'Crab FINISHED'
-  print '======================================'
-
 
 def TrackCrabWobble1(): 
@@ -888,26 +876,5 @@
     return False
 
-import types
-
-def wait_nice(self, state_num, timeout=None):                            
-  if not hasattr(self, 'stn'):
-    raise TypeError(self.name+' has no CMD called STATE')
-  if timeout == None:
-    timeout = float('inf')
-  else:
-    timeout = float(timeout)
-  start = time.time()
-  intermed = time.time()-1.
-  while not self.stn == state_num:
-    time.sleep(0.1)
-    if time.time() - intermed >= 1.:
-      print fad_control.events()[0], 'events @', ftm_control.trigger_rates()[3], 'Hz'
-      intermed = time.time()
-    
-    if time.time() >= start+timeout:
-      return False
-  return True
-
-fad_control.wait_nice = types.MethodType( wait_nice, fad_control) 
+
 
 
@@ -952,2 +919,149 @@
 
   return GUII.mean(), GUII.std(), GUII.max(), GUII.min()
+
+def TakeCrab():
+  """ Data taking and tracking script for Crab
+  """
+  print '======================================'
+  print 'Data taking and tracking script for'
+  print 'Crab'
+  print '======================================'
+  print 'starting up...'
+
+  # changing tracking to Crab Wobble 1
+  TrackCrabWobble1()
+
+  # Wait for drivectrl to reply that its tracking the given source
+  WaitForTracking()
+
+  DataTaking1()
+
+  # changing tracking to Crab Wobble 2
+  TrackCrabWobble2()
+
+  # Wait for drivectrl to reply that its tracking the given source
+  WaitForTracking()
+
+  # data taking to Crab Wobble 2
+  DataTaking2()
+
+  # Stop tracking
+  StopTracking()
+
+  print '======================================'
+  print 'Data taking and tracking script for'
+  print 'Crab FINISHED'
+  print '======================================'
+  
+
+def TakeMrk501():
+  print '======================================
+  print 'Data taking and tracking script for
+  print 'Mrk 501
+  print '======================================
+  print 'starting up...
+
+
+  # changing tracking to Mrk501 Wobble 1
+  TrackMrk501Wobble1()
+
+  # Wait for drivectrl to reply that its tracking the given source
+  WaitForTracking()
+
+  # starting data taking of Mrk501
+  DataTaking1()
+
+  # changing tracking to Mrk501 Wobble 2
+  TrackMrk501Wobble2()
+
+  # Wait for drivectrl to reply that its tracking the given source
+  WaitForTracking()
+
+  # data taking to Mrk501 Wobble 2
+  DataTaking2()
+
+  # Stop tracking
+  StopTracking()
+
+
+
+def TrackSourceWobbleX( sourcename, wobble_pos )
+  """ general Tracking function
+  """
+  wp = int(wobble_pos)
+  if wp != 1 and wp != 2:
+    raise ValueError('wobble_pos *must* be 1 or 2')
+  
+  if sourcename not in sourcedict:
+    print sourcedict.keys()
+    raise ValueError('sourcename: '+ sourcename +' must be in sourcedict.')
+
+  print 'moving telescope to wobble position ', wp, 'of ', sourcename
+  print '...waiting for DRIVE_CONTROL'
+  print '   to be in state 6: Armed'
+
+  drive_control.wait(6) #Armed
+  print 'DRIVE: ARMED'
+  time.sleep(5.)
+
+  wobble_offset = sourcedict[sourcename]['wobble_offset']
+  wobble_angle = sourcedict[sourcename]['wobble_angle'+str(wp)]
+  sourcename += '\0'
+  
+  last_drive_method = drive_control.track_source
+  last_drive_kwargs = { 'wobble_offset' : wobble_offset,
+                          'wobble_angle' : wobble_angle,
+                          'source_name' : sourcename }
+  last_drive_method(**last_drive_kwargs)
+  
+  print '... done'
+
+source_list = [
+  ['Crab', 0.6 , 50, -130],
+  ["1ES 2344+51.4", 0.6 , 90, -90 ],
+  ["Mrk 501", 0.6,  -22, -22+180 ],
+  ["Mrk 421", 0.6, 90, -90 ],
+  ["1ES 1218+304", 0.6, -5, -5+180 ],
+  ["1ES 1959+650", 0.6,  155, 155-180 ],
+  ["Dark Patch 2", 0.6 , 90, -90 ],
+  ["Dark Patch 3", 0.6 , 90, -90 ],
+  ["H 1426+428", 0.6 , 90, -90 ],
+  ["IC 310", 0.6,  -18, -18+180 ],
+  ["PKS 2155-304", 0.6,  90, -90 ] ]
+  
+sourcedict{}
+
+def make_sourcedict():
+  for s in source_list:
+    sourcedict[s[0]] = {}
+    sourcedict[s[0]]['wobble_offset'] = s[1]
+    sourcedict[s[0]]['wobble_angle1'] = s[2]
+    sourcedict[s[0]]['wobble_angle2'] = s[3]
+
+
+def TrackCrabWobble1_new(): 
+  """ changing tracking to "Crab" Wobble 1
+  """
+  TrackSourceWobbleX( 'Crab', 1)
+
+def TrackCrabWobble2_new(): 
+  """ changing tracking to "Crab" Wobble 1
+  """
+  TrackSourceWobbleX( 'Crab', 2)
+
+
+def TakeSource( name ):
+  if name not in sourcedict:
+    print name, 'not in dict of sources, possible sources are:'
+    print sorted(sourcedict.keys())
+    raise ValueError('wrong source name')
+    
+  TrackSourceWobbleX( name, 1) # Track Wobble pos 1 of source
+  WaitForTracking()
+  DataTaking1()
+
+  TrackSourceWobbleX( name, 2) # Track Wobble pos 2 of source
+  WaitForTracking()
+  DataTaking2()
+  
+  StopTracking()
