16 October 2012 Fermilab DS50 DAQ meeting: notes on status of software

Status of software (from Marc and Chris)

We have two packages:


This contains generic components; depends upon art and mvapich2. Has no experiment-specific code.


This contains components for building DS50 daq event-building software (and some control stuff).

  • Compression directory
    • compression algorithm
    • decompression algorithm
    • algorithms rely on a text data file that provide the data for the Huffman tree
  • ArtModules directory
    • compression module for the art framework
    • decompression module for the art framework
    • module for generating frequency table from an example DS50 data file
    • we are lacking an example data file from which we can generate a 14-bit compression tree
    • need updating to deal with reading ADC range from data in the VT172xFragment object [note: V172xFragment::adc_range() should take no argument)
  • DAQ directory
    • classes that represent DS50-specific fragment types
    • read- and write-overlays to fill in Fragments
    • Need to be updated to have ADC size as a data member of the V172xFragment class; many changes throughout to get rid of external setting of number of ADC bits
    • classes to represent compressed “event” (really a fragment).
    • DS-50 specific “plug-ins” for reading files (V172xFileReader_generator) and for reading the hardware (V172xDriver_generator) and for simulating data (V172xSimulator_generator); the simulator is terribly slow.
    • “main” program stubs for the aggregator, boardreader, eventbuilder processes.
    • xmlrpc_commander: application object for main program? Significant use of CPP macros, very simple state machine encoded. Macros seem to be used to create a state machine. Commands to change state are: “pause”, “resume”, “stop”, “abort”, and “reboot” (reboot the computer!)
    • xmlrpc_main: main program, which runs xmlrpc_commander application object.


  1. We need to understand who owns what, and what ownership is shared. What can we change without “asking permission”? What must we not change without “asking permission”?
  2. We need to generate our own task list. We know some of the things that belong on this. To some extent, this is the purpose of our meeting.
  3. Are we (all of DS50) agreed on the multiple-executable version of the MPI program? Chris’s most recent discussion with Alessandro on the topic seems to indicate he is not on board, but it also seems that the document is clear that this is the plan.
  4. To the best of our knowledge, the code that we need to be modifying is all in ds50daq; artdaq should be (relatively) stable.