6 #include "EVENT/LCIO.h" 
   12 #include <sio/exception.h> 
   14 #include <sio/compression/zlib.h> 
   23     struct stat fileinfo ;
 
   25     if ( ::stat( sioFilename.c_str(), &fileinfo ) == 0 ) {
 
   28               + 
" \n              open it in append or new mode !\n" 
   32     open( filename, EVENT::LCIO::WRITE_NEW ) ;
 
   41     _raMgr = std::make_shared<SIO::LCIORandomAccessMgr>() ;
 
   43       case EVENT::LCIO::WRITE_NEW :
 
   46       case EVENT::LCIO::WRITE_APPEND :
 
   48         SIO_DEBUG( 
"SIOWriter::open: Opening in write append mode" );
 
   50         istr.open( sioFilename, std::ios::binary ) ;
 
   52         if( not istr.is_open() ) {
 
   55         SIO_DEBUG( 
"SIOWriter::open: Opening in write append mode 1" );
 
   56         bool hasRandomAccess = 
_raMgr->initAppend( istr ) ;
 
   58         SIO_DEBUG( 
"SIOWriter::open: Opening in write append mode 2" );
 
   59         if( hasRandomAccess ) {
 
   60           _stream.
open( sioFilename.c_str() , std::ios::binary | std::ios::out | std::ios::in ) ;
 
   72           _stream.
open( sioFilename.c_str() , std::ios::binary | std::ios::out | std::ios::ate ) ;
 
   74         SIO_DEBUG( 
"SIOWriter::open: Opening in write append mode ... OK" );
 
   78       SIO_THROW( sio::error_code::not_open, 
"[SIOWriter::open()] Couldn't open file: '" + sioFilename + 
"'" ) ;
 
   94     sio::buffer rawBuffer( buflen ) ;
 
   96     sio::record_info recinfo {} ;
 
  100       sio::zlib_compression compressor {} ;
 
  104       sio::buffer compBuffer( rawBuffer.size() ) ;
 
  106       sio::api::compress_record( recinfo, rawBuffer, compBuffer, compressor ) ;
 
  111           throw IO::IOException( 
"[MT::LCWriter::writeRunHeader] stream not opened") ;
 
  113         sio::api::write_record( 
_stream, rawBuffer.span(0, recinfo._header_length), compBuffer.span(), recinfo ) ;
 
  126         throw IO::IOException( 
"[MT::LCWriter::writeRunHeader] stream not opened") ;
 
  128       sio::api::write_record( 
_stream, rawBuffer.span(), recinfo ) ;
 
  149     sio::buffer hdrRawBuffer( buflen ) ;
 
  150     sio::buffer evtRawBuffer( buflen ) ;
 
  152     sio::record_info rechdrinfo {} ;
 
  155     sio::record_info recinfo {} ;
 
  161       sio::zlib_compression compressor {} ;
 
  163       sio::buffer hdrCompBuffer( hdrRawBuffer.size() ) ;
 
  164       sio::buffer evtCompBuffer( evtRawBuffer.size() ) ;
 
  166       sio::api::compress_record( rechdrinfo, hdrRawBuffer, hdrCompBuffer, compressor ) ;
 
  167       sio::api::compress_record( recinfo, evtRawBuffer, evtCompBuffer, compressor ) ;
 
  174         sio::api::write_record( 
_stream, hdrRawBuffer.span(0, rechdrinfo._header_length), hdrCompBuffer.span(), rechdrinfo ) ;
 
  175         sio::api::write_record( 
_stream, evtRawBuffer.span(0, recinfo._header_length), evtCompBuffer.span(), recinfo ) ;
 
  189       sio::api::write_record( 
_stream, hdrRawBuffer.span(), rechdrinfo ) ;
 
  190       sio::api::write_record( 
_stream, evtRawBuffer.span(), recinfo ) ;
 
std::shared_ptr< SIO::LCIORandomAccessMgr > _raMgr
The random access manager for event/run random access in the file. 
 
static constexpr int RandomAccessSize
 
void close()
Closes the output file/stream. 
 
Helper struct that stores run and event positions in the file. 
 
virtual int getRunNumber() const =0
Return the run number off this event. 
 
void open(const std::string &filename)
Opens a file for writing. 
 
static void writeRecord(sio::buffer &outbuf, EVENT::LCEvent *event, const SIOHandlerMgr &handlerMgr, sio::record_info &rec_info, sio::options_type opts=0)
Write an event record. 
 
void writeEvent(EVENT::LCEvent *evt)
Writes the given event to file. 
 
IOException used for reading/writing errors. 
 
std::mutex _mutex
Synchronization mutex. 
 
static constexpr const char * FileExtension
The lcio file extension name. 
 
std::atomic< unsigned int > _maxBufferSize
The compression level. 
 
The main event interface. 
 
std::atomic< int > _compressionLevel
The compression level. 
 
void setCompressionLevel(int level)
Set the compression level - needs to be called before open() otherwise call will have no effect...
 
Holds instances of all types of SIOObjectHandlers. 
 
virtual int getEventNumber() const =0
Returns this event's number . 
 
pair< int, string > level
 
void writeRunHeader(EVENT::LCRunHeader *hdr)
Writes the given run header to file. 
 
std::ofstream _stream
The output file stream. 
 
static std::string getSIOFileName(const std::string &filename)