Create an art source capable of receiving events sent via a Transfer plugin from an artdaq aggregator
Traditionally, monitoring has been performed in artdaq by a dedicated monitoring aggregator receiving events from the diskwriting aggregator and sending those events through an art workflow imbedded in artdaq code. However, monitoring artdaq-based DAQ systems could be more flexible if users could launch standalone art processes capable of reading in events sent out by an aggregator, which could then run user-specific art modules that artdaq need not be directly aware of. For this purpose, the TransferInput source has been created. To see it in action, if you've used quick-start to install and build artdaq-demo off its a02e7be28d561197c5971d9891f962922f438795 commit on mu2edaq01 , you can do the following:
-Switch the Transfer plugin from shmem (shared memory) to multicast; to do this, in artdaq-demo/tools/generateAggregator.rb just change
transferPluginType: shmem to
transferPluginType: multicast and recompile
-Create two terminals on mu2edaq01 in which artdaq-demo is set up, as you would if you ran the standard 2x2x2 simulation
-Take the 2x2x2 simulation up through the init phase. Don't start it.
-Create one terminal on mu2edaq05 in which artdaq-demo is set up
-If you're in build_artdaq-demo, run
art -c fcl/TransferInput.fcl
-Now start the system
What you'll see is that there are now TWO sets of WFViewer plots created - one from the monitoring aggregator on mu2edaq01, and one from the standalone art process on mu2edaq05. Note that in the fcl/TransferInput.fcl art workflow running on mu2edaq05 there's a module called "CheckIntegrity" which is running; it's making sure that the distribution in the (TOY1) fragment payloads is monotonically increasing. You shouldn't see any error messages. On the other hand, if you edit artdaq-demo/tools/fcl/ToySimulator.fcl so that the distribution_type is no longer 2 (the monotonic distribution) you'll get an error message for every event.
A note for artdaq developers: the implementation of the TransferInput source can be found in artdaq/TransferPlugins/TransferInput_source.cc . From an implementation perspective, observe that TransferInput is actually the ArtdaqInput class templatized with the TransferWrapper class. By point of comparison, the NetMonInput source is simply the ArtdaqInput class templatized by the NetMonWrapper class. The reason for the creation of ArtdaqInput is that a great deal of the code dealing with art principals, etc. need not be different between the two sources.
The following commits involved the development of the TransferInput source: