Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
import socket
import DaqScan
import ConfigDb

if __name__ == "__main__":
#
#  Connect the socket to the appropriate hutch DAQ system
#
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((options.host,options.port))
#
#  Get the current configuration key in use and set the value to be used
#   (assumes we are using the same detector configuration as currently running)
#
    cdb = ConfigDb.Db()
    cdb.recv_path(s)
    key = DaqScan.DAQKey(s)
    key.set(key.value)
#
#  Send the structure the first time to put the control variables
#    in the file header
#
    data = DaqScan.DAQData()
    data.setevents(0)
    data.addcontrol(DaqScan.ControlPV('EXAMPLEPV1',0))
    data.addcontrol(DaqScan.ControlPV('EXAMPLEPV2',0))
    data.addmonitor(DaqScan.MonitorPV('BEAM:LCLS:ELEC:Q',options.qbeam,1.))
    data.send(s)
#
#  Wait for the DAQ to declare 'configured'
#
    result = DaqScan.DAQStatus(s)
    print "Configured."
#
#  Wait for the user to declare 'ready'
#    Setting up monitoring displays for example
#
    ready = raw_input('--Hit Enter when Ready-->')
    for cycle in range(options.cycles):
        data = DaqScan.DAQData()
        data.setevents(options.events)
        data.addcontrol(DaqScan.ControlPV('EXAMPLEPV1',cycle))
        data.addcontrol(DaqScan.ControlPV('EXAMPLEPV2',100-cycle))
        data.addmonitor(DaqScan.MonitorPV('BEAM:LCLS:ELEC:Q',options.qbeam,1.))
        print "Cycle ", cycle
        data.send(s)
        result = DaqScan.DAQStatus(s)  # wait for enabled , then enable the EVR sequence if needed
        result = DaqScan.DAQStatus(s)  # wait for disabled, then disable the EVR sequence if needed
#
#  Wait for the user to declare 'done'
#    Saving monitoring displays for example
#
    ready = raw_input('--Hit Enter when Done-->')
    s.close()

When the socket connects, manual control through the DAQ Control GUI is disabled.  The script retrieves detector readout configuration from the DAQ system, creates a new one if needed (advanced), and instructs the DAQ which configuration to use.  Then, the script informs the DAQ what are the scan variables to be controlled (for communication to the online monitoring and recorded data), and what EPICS PVs, if any, should be monitored as a condition for taking data (none is common).  Then, the script takes responsibility for controlling the scan variables, and informs the DAQ of the scan variable settings at each step and the number of events to acquire.  The DAQStatus method is called to enable the DAQ to acquire data.  A second call to DAQStatus then waits for the DAQ to complete the acquisition for that step.  When the socket is closed, manual control through the DAQ Control GUI resumes.

Running the sequencer

More info here

...