Hooks allows users to inject extra code at certain positions of the scanning procedure. The following example shows how this can be done using Macro classes.
#!/usr/bin/env python # file name: /home/pXXuser/sardanaMacros/hooked_scan_class.py """the demo for a hooked scan""" from __future__ import print_function __all__ = ["hooked_scan_class"] import PyTango from sardana.macroserver.macro import * from sardana.macroserver.macro import macro class hooked_scan_class(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_pre_scan(self): self.info("\t pre-scan hook") def hook_pre_acq(self): self.info("\t pre-acq hook") def hook_post_acq(self): self.info("\t post-acq hook") def hook_pre_move(self): self.info("\t pre-move hook") def hook_post_move(self): self.info("\t post-move hook") def hook_post_scan(self): self.info("\t post-scan hook") 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) ascan.pre_scan_hooks = [self.hook_pre_scan] ascan.post_scan_hooks = [self.hook_post_scan] ascan.hooks = [ (self.hook_pre_acq, ["pre-acq"]), (self.hook_post_acq, ["post-acq"]), (self.hook_pre_move, ["pre-move"]), (self.hook_post_move, ["post-move"]), ] self.runMacro(ascan)