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.