Here is an example of how to access scan data from the post-acq hook:
#!/usr/bin/env python
# file name: /home/pXXuser/sardanaMacros/hookedScan.py
"""the demo for a hooked scan"""
__all__ = ["hookedScan"]
import PyTango
from sardana.macroserver.macro import *
from sardana.macroserver.macro import macro
class hookedScan(Macro):
"""An example on how to attach hooks to the various hook points of a scan."""
param_def = [
['motor', Type.Motor, None, 'Motor to move'],
['start_pos', Type.Float, None, 'Scan start position'],
['final_pos', Type.Float, None, 'Scan final position'],
['nr_interv', Type.Integer, None, 'Number of scan intervals'],
['integ_time', Type.Float, None, 'Integration time']
]
def hook_post_acq(self):
self.info("--- post-acq hook")
lst = self.ascan.data.records
if len(lst) == 0:
return
for k in list( lst[-1].data.keys()):
self.output( " %s -> %s " % (k, str( lst[-1].data[k])))
def run(self, motor, start_pos, final_pos, nr_interv, integ_time):
ascan, pars = self.createMacro( "ascan", motor, start_pos, final_pos, nr_interv, integ_time)
self.ascan = ascan
ascan.hooks = [(self.hook_post_acq, ["post-acq"])]
self.runMacro(ascan)
The corresponding Spock output:
p09/door/haso107d1.01 [65]: %hookedScan exp_dmy01 0 10 2 0.1 Operation will be saved in /home/kracht/temp/tst_[ScanId].fio (fio) Scan #92 started at Tue May 26 11:19:15 2015. It will take at least 0:00:02.243056 Moving to start positions... #Pt No exp_dmy01 d1_t01 sig_gen dt --- post-acq hook 0 0 0.1 0.865465 0.865937 --- post-acq hook haso107d1:10000/expchan/vc_sig_gen/1 -> 0.865465447158 haso107d1:10000/expchan/dgg2_d1_01/1 -> 0.1 exp_dmy01 -> 0.0 point_nb -> 0 timestamp -> 0.865936994553 1 5 0.1 0.295375 1.60491 --- post-acq hook haso107d1:10000/expchan/vc_sig_gen/1 -> 0.2953754684 haso107d1:10000/expchan/dgg2_d1_01/1 -> 0.1 exp_dmy01 -> 5.0 point_nb -> 1 timestamp -> 1.60490703583 2 10 0.1 0.0936115 2.4303 Operation saved in /home/kracht/temp/tst_00092.fio (fio) Scan #92 ended at Tue May 26 11:19:17 2015, taking 0:00:02.696336.Dead time 88.9% (motion dead time 73.4%)