The readout controller software handles triggers and buffers data in memory. The software has the ability to directly write the data to a local, or NFS mounted disk for long term storage. For test stands the user can also select to throw away all the data (speed tests or histogramming in the second ROL) or to dump the contents of the data buffers on the console of the Readout Controller as a hexadecimal debug dump. In the case of large scale experiments, where many readout controllers are used in parallel, some mechanism is required to collate the data so that fragments of the same event are stored together. In CODA this is most commonly accomplished by an event builder. The event builder is a part of the CODA software which runs on UNIX and communicates with the readout controllers over a network. In CODA data transport is over commercial network hardware. Several factors influenced this decision. Not the least of these factors were the facts that network hardware is evolving very rapidly and is low cost. (Most controller boards have 100MBit/S Ethernet as standard). Each readout controller buffers up a number of events and sends them over the network to the event builder. Both the readout controller and event builder are written in such a way as to maximize data transfer performance and minimize cpu load. Under typical conditions the readout controller/event builder pair can saturate a 100MBit/S Ethernet line at 10MByte/S. By using high speed network switches and many data links in parallel very high data transport speeds can be achieved.
The CODA event builder is designed to run on most flavors of UNIX. Currently Jefferson Lab supports Solaris and LINUX. The limiting factors for performance are CPU speed and network throughput. These factors may be manipulated to suit the data acquisition problem being solved. All of the data transport and flow control software is a part of CODA; the user need only provide the custom code to readout the detector modules.
The event builder has an unusual feature which is worth commenting on here. The readout controllers wrap the events in a CODA format event header. The event builder has the ability to load two user definable software modules. The first decodes the incoming event format, the second encodes the outgoing format. In this way the user can take data in a lean and fast format, such as CODA event format, and have the event builder translate the events into a format more suited to online monitoring.