Running DAQ Interface » History » Version 27

« Previous - Version 27/223 (diff) - Next » - Current version
John Freeman, 07/14/2014 11:57 AM

Running DAQ Interface

DAQ Interface is designed to be run, along with rest of the run control code, on . To obtain an account on this system, contact John Freeman, . Once you have an account, you may do the following:

  • Check out the run control software:

    Create a new directory, cd into it, and execute

    git clone ssh://

  • Make sure you're on the feature/DAQInterface branch
    cd into lbnerc/, and execute
    git checkout feature/DAQInterface 
  • Set up the environment:
    From the lbnerc/ directory, execute
    source source_me
    This will both create a local build of /usr/local/lbne-artdaq-base/lbne-artaq, as well as set up the Python virtual environment needed by the LBNE RC code in the parent directory of lbnerc, in a directory call "env" (in other words, "env" and "lbnerc" are at the same level of the directory hierarchy on the system). If this is the first time you've build lbne-artdaq and/or set up the Python virtual environment, each process will take roughly two minutes. Note that while there will be a few error/warning messages displayed at different points of the setup, at the end you should see
    Environment ready; consider running the unit tests via command nosetests

    n.b. As of 7/8/14 if you run nosetests 4 of the 65 tests will fail; more than this, and there may be a problem which will affect the running of DAQInterface. The most likely cause is that an lbnecontrol and/or daqinterface process is already running (described right below).
  • Start LBNE run control:
     lbnecontrol & 
    . Note this won't work if lbnecontrol is already running; to find this out, run "ps -A | grep lbnecontrol"
  • Start DAQ Interface:
     daqinterface -n daqint -r 5570 -c localhost -H localhost & 
    . Like lbnerc, this also won't work if daqinterface is already running
  • Take DAQ Interface through the standard transitions :
    Fire up a new shell/terminal in which the artdaq processes are launched, and initialize them with FHiCL documents, by executing the following:
    lbnecmd init daq

    Start the toy fragment generator, which produces simulated CAEN board data, and plot the data using an Art module:
    lbnecmd start daq

    Pause it, ending the subrun but not the run:
    lbnecmd pause daq

    Resume DAQ running:
    lbnecmd resume daq

    Halt the running of the DAQ:
    lbnecmd stop daq

    Kill all the artdaq processes:
    lbnecmd terminate daq
  • If Problems Arise
    As of this writing (7/8/14) there has not yet been extensive user feedback concerning DAQInterface; despite this, certain potential problems have been anticipated and are handled within DAQInterface. These problems include:
    1. An artdaq process returns an error state after a transition request, or an exception is thrown by the XML-RPC library during the request
    2. During periodic checks, one or more artdaq processes expected to exist are not found

In either case, an error is reported via 0MQ to run control, and the "Recover" transition is automatically triggered. This transition is a fairly blunt instrument: it will kill any remaining artdaq processes and return DAQInterface to its original state of "stopped" (i.e., one in which it requires the "init" transition before anything else is done).

In order to see this for yourself, you can deliberately sabotage one of the transitions. E.g., during the "init" transition, FHiCL documents located in /data/fcl/daqinterface are used to initialize the artdaq processes after these processes have been started. You can replace one of these filenames listed in the lbnerc/rc/control/ file with one of your own files intentionally designed to be improper FHiCL; this will then trigger a "recover" transition automatically when an "init" transition is requested. You can then use the "lbnecmd check" command to see for yourself that DAQ Interface has returned to its original state. Another thing to do is, after the init transition, once the artdaq process terminal pops up, close it -- this will terminate the artdaq processes, triggering a call to "Recover".

Please note that if you issue an "init" transition and then follow it with a "terminate" transition, you'll see an exception in the artdaq terminal window which looks like the snippet below; this is because statistics collection which occurs during termination will fail if no data's been collected, which is expected:

Tue Jul 08 14:16:33 -0500 2014:  Time Summary: 
Tue Jul 08 14:16:33 -0500 2014:  Min: 0
Tue Jul 08 14:16:33 -0500 2014:  Max: 0
Tue Jul 08 14:16:33 -0500 2014:  Avg: inf
Tue Jul 08 14:16:33 -0500 2014: %MSG-s ArtException:  Aggregator-lbnedaqtest01-5265 JobSetup
Tue Jul 08 14:16:33 -0500 2014: cet::exception caught in art
Tue Jul 08 14:16:33 -0500 2014: ---- DataCorruption BEGIN
Tue Jul 08 14:16:33 -0500 2014:   NetMonInputDetail: Could not receive message!
Tue Jul 08 14:16:33 -0500 2014: ---- DataCorruption END
Tue Jul 08 14:16:33 -0500 2014: %MSG
Tue Jul 08 14:16:33 -0500 2014: %MSG-s ArtException:  Aggregator-lbnedaqtest01-5266 JobSetup
Tue Jul 08 14:16:33 -0500 2014: cet::exception caught in art
Tue Jul 08 14:16:33 -0500 2014: ---- DataCorruption BEGIN
Tue Jul 08 14:16:33 -0500 2014:   NetMonInputDetail: Could not receive message!
Tue Jul 08 14:16:33 -0500 2014: ---- DataCorruption END
  • Troubleshooting
    • On the initial transition ("lbnecmd init daq"), you see "error: [Errno 111] Connection refused"
      If a "Recover" is triggered and you can see via "lbnecmd check" that DAQInterface is in the "stopped" state, try initializing again. If that doesn't work, you can try increasing the value of the pauseBeforeCommands member variable in the DAQInterface class; this is the pause, in seconds, between when the artdaq processes are launched and when they're sent the FHiCL documents to initialize. Empirically, it appears there needs to be a pause of at least 4 seconds on before the FHiCL documents can be successfully sent via XML-RPC to the processes; increasing this value may make it less likely that the "Connection refused" error occurs. Remember to kill and then restart DAQInterface if you've altered its source code.