The daq_rec process has a unique task of storing events on an I/O device. Recording can be done on disk files only, on the magnetic tape device only, or on both. As a tape device a DLT unit is used. Event recording is always done in an ``exchange'' mode allowing to read data later at any platform.
The central concept of I/O is EventContainer - an abstract class defining an interface common for all I/O classes. All other I/O classes doing file (FileEC), tape (TapeEC), memory (ShMemEC), or network (NetEC) I/O inherit from EventContainer.
class EventContainer { public: enum Mode { in, out, mon }; enum State { good = 0, eof = 1, pseudo_eof = 2, eot = 4, interrupted = 8, fail = 16, bad = 32 }; EventContainer(Mode aMode = in); virtual ~EventContainer(); bool Good() const; bool Fail() const; State GetState() const; void SetState ( State st ); void Clear(); bool Is_EOF() const; operator void * () const; bool operator ! () const; virtual void Open() = 0; virtual void Close() = 0; virtual void Signal() {} virtual EventContainer & operator << (const IstraEvent &) = 0; virtual EventContainer & operator >> (IstraEvent &) = 0; virtual std::string StrError() const; virtual void Statistics(uint32 & nrec, uint32 & nMb, uint32 & nb) const = 0; virtual void PrintUsage(std::ostream &) const = 0; };
User can setup the configuration parameters defining a name of tape drive, tape record size, maximum size of disk files, maximum size of tape files, tape capacity etc as described in the Section 3.6.