The RingSourceMgr is an improved means for launching the ringFragmentSource processes that feed data to the event builder. In the past, users had to explicitly call EVBC::startRingSource, which merely launched an instance whose information was transient. The RingSourceMgr changes this by storing all of the information about the various ringFragmentSources that will feed the event builder. In doing so, the program has better knowledge about the processes that are running in the data stream. In the future there is also the possibility of adding graphical control over the information stored in the RingSourceMgr.
The RingSourceMgr is also a callout bundle for the ReadoutGUI state machine. Unless you need some special implementation of the RingSourceMgr's utlities, the most you will need to do with the API of the RingSourceMgr is to call the RingSourceMgr::register and RingSourceMgr::addSource procs. Doing so will cause the ReadoutGUI's state machine to invoke the desired functionality during state transitions of importance. The state transitions of interest and the logic executed is described here.
Entering NotReady state from any other state: All knowledge of ringFragmentSource processes discarded.
Leaving Halted state for Active state: There is a waiting period during which the RingSourceMgr checks for the presence of the event builder to start. Once an event builder has been established, ringFragmentSource processes are launched for all sources that are currently registered.
Adds the RingSourceMgr callout bundle to the
ReadoutGUI's state machine before the bundle bundleName
.
The bundleName
must have already been added
to the state machine.
The sourceUrl
is the URL of the data source.
This should the url of a ring buffer (e.g. tcp://someHost/ringName).
The tstampLibPath
is the path to the user's timestamp extractor library.
This is allowed to be left as an empty string if the expectBodyHeaders
argument is passed a true value.
The ids
argument is a list of
acceptable source ids. If the ringFragmentSource sees a ring
item with a source id different than what is provided here,
then the process with exit. If there was no body header on
the ring item, the ringFragmentSource will add a body header
with a source id that is the same as the first element of the
list passed to this argument.
The info
is a generic string that is
used to label the data source in the event builder GUI.
The optional expectBodyHeaders
argument is
defaulted to false and specifies whether all data passing
into the ringFragmentSource can be expected to have body
headers, in other words, a source id and timestamp. If the
ringFragmentSource is told to expect body headers, it allows
the caller to omit a valid timestamp extractor library path.
This however causes the ringFragmentSource to exit in failure
if data arrives wihout a body header. When the
expectBodyHeaders
argument is set to
false, then the user must provide a valid timestamp extractor
library to assign a timestamp to the ring item. Be aware that
if the data arrives with body headers already, the user's
timestamp extractor will be ignored while the timestamp in
the body header will be used.
The optional oneshot
argument specifies whether the
ringFragmentSource should exit after a symmetric number of begin and
end runs have been observed. By default it is set to false.
The optional timeout
argument specifies the number
of seconds that the ringFragmentSource will wait since the first end
run arrives before shutting down. By default this is set to 20 seconds.
The optional offset
argument is used to define
a integer value to add to the timestamp. One can use this to
compensate for a known, stable synchronization offset between data
streams passing through the event builder.
Retrieves the port that the event builder is listening for connections on. This works with the DAQPortManager to obtain the port so it is necessary that the the port manager is running. If the port cannot be found, an exceptional return occurs with an error code.
Deletes all knowledge of the sources that had been registered previously.
Deletes all knowledge of running ringFragmentSource processes.
Launches a ringFragmentSource process directly. The parameters have the same semantics and default values as the RingSourceMgr::addSource proc.
This essentially just calls RingSourceMgr::startSource for each of the registered ring sources.
This is a no-op.
When to
is "NotReady" it calls ::RingSourceMgr::resetSources.
When from
is "Halted" and to
is "Active", the event builder
is waited on to become available and then ::RingSourceMgr::onBegin is called.