The NSCL DAQ recognizes that you may want to supply data from the NSCL DAQ system to non NSCL DAQ aware clients. The most important clients of this sort are SpecTcl ore root which an be used to analyze data from the online system.
ringselector selects items from a ring buffer data source and copies them unmodified (binary) to its stdout. It can be run in a command line pipeline (e.g. with od to get a simple undecoded dump of the data), or on the other end of a pipe from an application to provide event data to that application.
Command line options provide a mechanism for to configure a predicate that will be used to select the type of items copied as well as whether or not all specified itesm or only a sample of the specified items will be copied to the output.
See OPTIONS below for information on how to configure this program.
--formattedIf supplied the data this application sends to stdout will be formatted rather than binary. Each item in the ring buffer will appear on a single line. Each 16 bit data entry for each ring item will be separated by a space from the others on the line.
The intent of this switch is to allow ringselector to be used as a data source for Tcl scripts that are easier to write if the data is ascii.
--source=ringurlDetermines the ring buffer from which data is taken. Most NSCL readout software create, if necessary, and produces data into a local ring buffer that matches the user name of the user running that program.
                        By default, therefore, unless --source
                        is specified, the
                        ringselector data source
                        is tcp://localhost/username
                        where username is the
                        username running the program.
                    
                        If --source is provided, its value
                        is the URI of a ring buffer.  The URI of a ring buffer
                        is of the form:
                        tcp://hostname/ringname
                        where hostname is the host
                        on which the ring lives (localhost for
                        local rings), and ringname is
                        the name of the ring on that host.
                    
--sample=typeList
                        If specified, the typeList item types
                        are only sampled.  typeList is a
                        comma separated list of item types.  Item types can
                        be specified numerically or symbolically.  The
                        type symbols and value scan be found in the
                        $daqroot/include/DataFormat.h
                        header file.
                    
--non-blockingIf present data are read in non-blocking mode. This means that if the process reading the RingSelector output is not keeping up, even unsampled data can be lost. This also prevents hang-ups when the process reading our stdout is not reading data.
--exclude=typeList
                        Specifies the set of ring item types that will not be
                        accepted for copy to stdout.  If this
                        option is present, the --accept option
                        may not be presnt.
                    
                        typeList is a
                        comma separated list of item types.  Item types can
                        be specified numerically or symbolically.  The
                        type symbols and value scan be found in the
                        $daqroot/include/DataFormat.h
                        header file.
                    
--accept=typeList
                        Specifies the set of ring bufer types that are accepted.
                        If this option is present, the --exclude
                        option may not be.
                    
                        typeList is a
                        comma separated list of item types.  Item types can
                        be specified numerically or symbolically.  The
                        type symbols and value scan be found in the
                        $daqroot/include/DataFormat.h
                        header file.
                    
--exitonendIf this is supplied, the ringselector exits when it sees the first end run event. This is meant to be used for pipelines that only need to process a single run. An example of that is the compatibility event logging utility.
--versionPrints out the version of the program and exists.
--helpPrints out program usage information and exits.
        Let's look at a few examples.  First let's take data from
        from a ring buffer with our username on spdaq22.nscl.msu.edu.
        We'll just pipe this into the od utility.  We will only be interested
        in state transition items and sampled event data (a
        CDesiredTypesPredicate).
    
Example 1. Dumping state changes and sampled event data with od
    ringselector --accept=BEGIN_RUN,END_RUN,PAUSE_RUN,RESUME_RUN \
                 --sample=PHYSICS_EVENT                          \
                 --source=tcp://spdaq22.nscl.msu.edu/`whoami` | od -xa
        Note how the whoami command is used to make this work independent of the actual user running the program.
        Let's take data from the same ring buffer. Now we'll
        specify that we want all data items, except for the packet type
        documentation.  We will still sample physics events. This produces
        a CAllButPredicate.
    
Example 2. Dumping all but packet types
    ringselector --exclude=PACKET_TYPES --sample=PHYSICS_EVENT \
                 --source=tcp://spdaq22.nscl.msu.edu/`whoami` | od -xa
        
        If neither --exclude nor --accept
        is provided on the commandline, the predicate used is
        a CAllButPredicate.
        The following attaches SpecTcl to data from the ring we've been
        using as an example, in the normal way.