1 | #ifndef HEPMC_COMMON_IO_H
|
---|
2 | #define HEPMC_COMMON_IO_H
|
---|
3 | // ----------------------------------------------------------------------
|
---|
4 | //
|
---|
5 | // CommonIO.h
|
---|
6 | // Author: Lynn Garren
|
---|
7 | //
|
---|
8 | // Allowed keys used at the beginning and end of HepMC data dumps
|
---|
9 | //
|
---|
10 | // ----------------------------------------------------------------------
|
---|
11 |
|
---|
12 | #include <fstream>
|
---|
13 | #include <string>
|
---|
14 |
|
---|
15 | #include "GenEvent.h"
|
---|
16 | #include "TempParticleMap.h"
|
---|
17 | #include "ParticleDataTable.h"
|
---|
18 |
|
---|
19 | namespace HepMC {
|
---|
20 |
|
---|
21 | /// The known_io enum is used to track which type of input is being read
|
---|
22 | enum known_io { gen=1, ascii, extascii, ascii_pdt, extascii_pdt };
|
---|
23 |
|
---|
24 | class CommonIO {
|
---|
25 |
|
---|
26 | public:
|
---|
27 |
|
---|
28 | CommonIO();
|
---|
29 | ~CommonIO() {;}
|
---|
30 |
|
---|
31 | // input keys - IO_GenEvent is strongly recommended
|
---|
32 | std::string IO_GenEvent_Key() const { return m_io_genevent_start; }
|
---|
33 | std::string IO_GenEvent_End() const { return m_io_genevent_end; }
|
---|
34 | // IO_Ascii is deprecated, but we want to be able to read these files
|
---|
35 | std::string IO_Ascii_Key() const { return m_io_ascii_start; }
|
---|
36 | std::string IO_Ascii_End() const { return m_io_ascii_end; }
|
---|
37 | // IO_ExtendedAscii has been removed, but we want to be able to read these files
|
---|
38 | std::string IO_ExtendedAscii_Key() const { return m_io_extendedascii_start; }
|
---|
39 | std::string IO_ExtendedAscii_End() const { return m_io_extendedascii_end; }
|
---|
40 | /// get IO type
|
---|
41 | int io_type() const { return m_io_type; }
|
---|
42 |
|
---|
43 | // write keys
|
---|
44 | void write_IO_GenEvent_Key( std::ostream& );
|
---|
45 | void write_IO_GenEvent_End( std::ostream& );
|
---|
46 | // write keys for deprecated IO methods
|
---|
47 | void write_IO_Ascii_Key( std::ostream& );
|
---|
48 | void write_IO_Ascii_End( std::ostream& );
|
---|
49 | // write keys for deprecated particle data IO methods
|
---|
50 | void write_IO_Ascii_PDT_Key( std::ostream& );
|
---|
51 | void write_IO_Ascii_PDT_End( std::ostream& );
|
---|
52 |
|
---|
53 | // methods to read input
|
---|
54 |
|
---|
55 | /// look for line type (key)
|
---|
56 | int find_file_type( std::istream& );
|
---|
57 |
|
---|
58 | /// look for line type (key)
|
---|
59 | int find_end_key( std::istream& );
|
---|
60 |
|
---|
61 | bool read_io_ascii( std::istream* is, GenEvent* evt );
|
---|
62 |
|
---|
63 | bool read_io_extendedascii( std::istream* is, GenEvent* evt );
|
---|
64 |
|
---|
65 | bool read_io_genevent( std::istream* is, GenEvent* evt );
|
---|
66 |
|
---|
67 | bool read_units( std::istream* is, GenEvent* evt );
|
---|
68 |
|
---|
69 | /// needed when reading a file without units if those units are
|
---|
70 | /// different than the declared default units
|
---|
71 | /// (e.g., the default units are MeV, but the file was written with GeV)
|
---|
72 | /// This method is not necessary if the units are written in the file
|
---|
73 | void use_input_units( Units::MomentumUnit, Units::LengthUnit );
|
---|
74 |
|
---|
75 | /// ParticleDataTable is deprecated.
|
---|
76 | /// We include this method for reading old files which may have ParticleData information.
|
---|
77 | bool read_io_particle_data_table( std::istream*, ParticleDataTable* );
|
---|
78 |
|
---|
79 | protected:
|
---|
80 | // methods used by the read_io* methods
|
---|
81 | HeavyIon* read_heavy_ion( std::istream* );
|
---|
82 | PdfInfo* read_pdf_info( std::istream* );
|
---|
83 | GenParticle* read_particle( std::istream*, TempParticleMap& );
|
---|
84 | GenVertex* read_vertex( std::istream*, TempParticleMap& );
|
---|
85 | /// ParticleDataTable is deprecated.
|
---|
86 | /// We include this method for reading old files which may have ParticleData information.
|
---|
87 | ParticleData* read_particle_data( std::istream*, ParticleDataTable* );
|
---|
88 |
|
---|
89 | private:
|
---|
90 | std::string m_io_genevent_start;
|
---|
91 | std::string m_io_ascii_start;
|
---|
92 | std::string m_io_extendedascii_start;
|
---|
93 | std::string m_io_genevent_end;
|
---|
94 | std::string m_io_ascii_end;
|
---|
95 | std::string m_io_extendedascii_end;
|
---|
96 | // particle data method keys
|
---|
97 | std::string m_io_ascii_pdt_start;
|
---|
98 | std::string m_io_extendedascii_pdt_start;
|
---|
99 | std::string m_io_ascii_pdt_end;
|
---|
100 | std::string m_io_extendedascii_pdt_end;
|
---|
101 | // io type
|
---|
102 | int m_io_type;
|
---|
103 | // default io units - used only when reading a file with no units
|
---|
104 | Units::MomentumUnit m_io_momentum_unit;
|
---|
105 | Units::LengthUnit m_io_position_unit;
|
---|
106 |
|
---|
107 | };
|
---|
108 |
|
---|
109 | // inline methods
|
---|
110 |
|
---|
111 | inline CommonIO::CommonIO()
|
---|
112 | : m_io_genevent_start("HepMC::IO_GenEvent-START_EVENT_LISTING"),
|
---|
113 | m_io_ascii_start("HepMC::IO_Ascii-START_EVENT_LISTING"),
|
---|
114 | m_io_extendedascii_start("HepMC::IO_ExtendedAscii-START_EVENT_LISTING"),
|
---|
115 | m_io_genevent_end("HepMC::IO_GenEvent-END_EVENT_LISTING"),
|
---|
116 | m_io_ascii_end("HepMC::IO_Ascii-END_EVENT_LISTING"),
|
---|
117 | m_io_extendedascii_end("HepMC::IO_ExtendedAscii-END_EVENT_LISTING"),
|
---|
118 | m_io_ascii_pdt_start("HepMC::IO_Ascii-START_PARTICLE_DATA"),
|
---|
119 | m_io_extendedascii_pdt_start("HepMC::IO_ExtendedAscii-START_PARTICLE_DATA"),
|
---|
120 | m_io_ascii_pdt_end("HepMC::IO_Ascii-END_PARTICLE_DATA"),
|
---|
121 | m_io_extendedascii_pdt_end("HepMC::IO_ExtendedAscii-END_PARTICLE_DATA"),
|
---|
122 | m_io_type(0),
|
---|
123 | m_io_momentum_unit(Units::default_momentum_unit()),
|
---|
124 | m_io_position_unit(Units::default_length_unit())
|
---|
125 | {}
|
---|
126 |
|
---|
127 | inline void CommonIO::write_IO_GenEvent_Key( std::ostream& os )
|
---|
128 | { os << m_io_genevent_start << "\n"; }
|
---|
129 |
|
---|
130 | inline void CommonIO::write_IO_GenEvent_End( std::ostream& os )
|
---|
131 | { os << m_io_genevent_end << "\n"; }
|
---|
132 |
|
---|
133 | inline void CommonIO::write_IO_Ascii_Key( std::ostream& os )
|
---|
134 | { os << m_io_ascii_start << "\n"; }
|
---|
135 |
|
---|
136 | inline void CommonIO::write_IO_Ascii_End( std::ostream& os )
|
---|
137 | { os << m_io_ascii_end << "\n"; }
|
---|
138 |
|
---|
139 | inline void CommonIO::write_IO_Ascii_PDT_Key( std::ostream& os )
|
---|
140 | { os << m_io_ascii_pdt_start << "\n"; }
|
---|
141 |
|
---|
142 | inline void CommonIO::write_IO_Ascii_PDT_End( std::ostream& os )
|
---|
143 | { os << m_io_ascii_pdt_end << "\n"; }
|
---|
144 |
|
---|
145 | } // HepMC
|
---|
146 |
|
---|
147 | #endif // HEPMC_COMMON_IO_H
|
---|