/** \file declaration of AugerFile \author Stefano Argirņ Antoine Letessier-Selvon */ #ifndef __HybridEventFile_h_ #define __HybridEventFile_h_ #include #include #include class AugerEvent; class AugerKey; class TFile; class TIter; /** \class AugerFile AugerFile.h "/AugerFile.h" \brief The I/O class for AugerEvent */ class AugerFile { public: AugerFile(); AugerFile(int argc, char **argv); AugerFile(std::vector); ~AugerFile(); /// Open modes enum Mode { eRead, eWrite, eAppend }; /// return status enum Status { eSuccess, eFailure, eEOF }; /// Construct and open an AugerFile AugerFile(const char *filename, Mode mode = eRead); /// Read a given position - Return AugerFile::eEOF if no more events available Status ReadPos(AugerEvent & event, unsigned int pos); /// Linear read - Return AugerFile::eEOF if no more events available Status ReadNext(AugerEvent & event); /// Linear read (Hybrids only) - Return AugerFile::eEOF if no more events available Status ReadNextHybrid(AugerEvent & event); /**Random access Read - @see AugerKey for indexing rules * Return AugerFile::eFailure * if no more events available */ Status Read(AugerEvent & event, AugerKey & key); /// Write @param event to file Status Write(AugerEvent & event, bool verbose = false); /// Open one file in given @mode Status Open(const char *filename, Mode mode); /** Open @param nfiles in @param filenames for read only * Files in @param filenames are separated by */ Status Open(const char *filenames); unsigned int NumberOfEvents(); /// Close file void Close(); private: Status ReadObj(TKey * key, AugerEvent & event); AugerFile(const AugerFile & theAugerFile); AugerFile & operator =(const AugerFile & theAugerFile); typedef std::vector < TFile * > FileContainer; typedef FileContainer::iterator FileContainerIter; FileContainer fFiles; FileContainerIter fCurrentFile; typedef std::vector < TKey * > KeyContainer; typedef KeyContainer::iterator KeyContainerIter; KeyContainer fKeys; TIter *fCurrentKey; }; // AugerFile #endif // __AugerFile_h_