HepMC3 event record library
WriterAsciiHepMC2.h
Go to the documentation of this file.
1// -*- C++ -*-
2//
3// This file is part of HepMC
4// Copyright (C) 2014-2020 The HepMC collaboration (see AUTHORS for details)
5//
6#ifndef HEPMC3_WRITERASCIIHEPMC2_H
7#define HEPMC3_WRITERASCIIHEPMC2_H
8///
9/// @file WriterAsciiHepMC2.h
10/// @brief Definition of class \b WriterAsciiHepMC2
11///
12/// @class HepMC3::WriterAsciiHepMC2
13/// @brief GenEvent I/O serialization for structured text files
14///
15/// @ingroup IO
16///
17#include "HepMC3/Writer.h"
18#include "HepMC3/GenEvent.h"
19#include "HepMC3/GenRunInfo.h"
20#include <string>
21#include <fstream>
22
23namespace HepMC3
24{
25
27{
28public:
29
30 /// @brief Constructor
31 /// @warning If file already exists, it will be cleared before writing
32 WriterAsciiHepMC2(const std::string& filename,
33 std::shared_ptr<GenRunInfo> run = std::shared_ptr<GenRunInfo>());
34
35 /// @brief Constructor from ostream
36 WriterAsciiHepMC2(std::ostream& stream,
37 std::shared_ptr<GenRunInfo> run = std::shared_ptr<GenRunInfo>());
38 /// @brief Destructor
40
41 /// @brief Write event to file
42 ///
43 /// @param[in] evt Event to be serialized
44 void write_event(const GenEvent& evt) override;
45
46 /// @brief Write the GenRunInfo object to file.
47 void write_run_info();
48
49 /// @brief Return status of the stream
50 bool failed() override;
51
52 /// @brief Close file stream
53 void close() override;
54
55 /// @brief Set output precision
56 ///
57 /// Available range is [2,24]. Default is 16.
58 void set_precision( const int& prec );
59
60 /// @brief Return output precision
61 int precision() const;
62private:
63
64 /// @name Buffer management
65 //@{
66
67 /// @brief Attempts to allocate buffer of the chosen size
68 ///
69 /// This function can be called manually by the user or will be called
70 /// before first read/write operation
71 ///
72 /// @note If buffer size is too large it will be divided by 2 until it is
73 /// small enough for system to allocate
74 void allocate_buffer();
75
76 /// @brief Set buffer size (in bytes)
77 ///
78 /// Default is 256kb. Minimum is 256b.
79 /// Size can only be changed before first read/write operation.
80 void set_buffer_size(const size_t& size );
81
82 /// @brief Escape '\' and '\n' characters in string
83 std::string escape(const std::string& s) const;
84
85 /// Inline function flushing buffer to output stream when close to buffer capacity
86 void flush();
87
88 /// Inline function forcing flush to the output stream
89 void forced_flush();
90
91 //@}
92
93
94 /// @name Write helpers
95 //@{
96
97 /// @brief Inline function for writing strings
98 ///
99 /// Since strings can be long (maybe even longer than buffer) they have to be dealt
100 /// with separately.
101 void write_string(const std::string &str );
102
103 /// @brief Write vertex
104 ///
105 /// Helper routine for writing single vertex to file
106 void write_vertex(ConstGenVertexPtr v);
107
108 /// @brief Write particle
109 ///
110 /// Helper routine for writing single particle to file
111 void write_particle(ConstGenParticlePtr p, int second_field);
112
113 //@}
114
115private:
116
117 std::ofstream m_file; //!< Output file
118 std::ostream* m_stream; //!< Output stream
119 int m_precision; //!< Output precision
120 char* m_buffer; //!< Stream buffer
121 char* m_cursor; //!< Cursor inside stream buffer
122 unsigned long m_buffer_size; //!< Buffer size
123 unsigned long m_particle_counter; //!< Used to set bar codes
124 std::string m_float_printf_specifier; //!< the specifier of printf used for floats
125};
126
127
128} // namespace HepMC3
129
130#endif
Definition of class GenEvent.
Definition of class GenRunInfo.
Definition of interface Writer.
Stores event-related information.
Definition: GenEvent.h:41
GenEvent I/O serialization for structured text files.
void set_buffer_size(const size_t &size)
Set buffer size (in bytes)
void set_precision(const int &prec)
Set output precision.
std::string escape(const std::string &s) const
Escape '\' and ' ' characters in string.
void allocate_buffer()
Attempts to allocate buffer of the chosen size.
char * m_cursor
Cursor inside stream buffer.
bool failed() override
Return status of the stream.
char * m_buffer
Stream buffer.
std::string m_float_printf_specifier
the specifier of printf used for floats
void close() override
Close file stream.
int precision() const
Return output precision.
void write_particle(ConstGenParticlePtr p, int second_field)
Write particle.
int m_precision
Output precision.
WriterAsciiHepMC2(const std::string &filename, std::shared_ptr< GenRunInfo > run=std::shared_ptr< GenRunInfo >())
Constructor.
std::ofstream m_file
Output file.
unsigned long m_particle_counter
Used to set bar codes.
void write_string(const std::string &str)
Inline function for writing strings.
unsigned long m_buffer_size
Buffer size.
void write_event(const GenEvent &evt) override
Write event to file.
void write_vertex(ConstGenVertexPtr v)
Write vertex.
void flush()
Inline function flushing buffer to output stream when close to buffer capacity.
void write_run_info()
Write the GenRunInfo object to file.
void forced_flush()
Inline function forcing flush to the output stream.
std::ostream * m_stream
Output stream.
Base class for all I/O writers.
Definition: Writer.h:25
HepMC3 main namespace.