1 | //--------------------------------------------------------------------------
|
---|
2 | #ifndef HEPMC_IO_PDG_PARTICLEDATATABLE_H
|
---|
3 | #define HEPMC_IO_PDG_PARTICLEDATATABLE_H
|
---|
4 |
|
---|
5 | //////////////////////////////////////////////////////////////////////////
|
---|
6 | // Matt.Dobbs@Cern.CH, November 1999, refer to:
|
---|
7 | // M. Dobbs and J.B. Hansen, "The HepMC C++ Monte Carlo Event Record for
|
---|
8 | // High Energy Physics", Computer Physics Communications (to be published).
|
---|
9 | //
|
---|
10 | // Reads a particle data table from file supplied in PDG format
|
---|
11 | // For the most recent table see: http://pdg.lbl.gov/computer_read.html
|
---|
12 | //////////////////////////////////////////////////////////////////////////
|
---|
13 | //
|
---|
14 | // Example of reading from file PDG98_ParticleDataTable.txt
|
---|
15 | //
|
---|
16 | // IO_PDG_ParticleDataTable pdg_io("PDG98_ParticleDataTable.txt");
|
---|
17 | // ParticleDataTable pdt = *pdg_io.read_particle_data_table();
|
---|
18 | // (note the read_particle_data_table method comes from the IO_Baseclass)
|
---|
19 | // or
|
---|
20 | // IO_PDG_ParticleDataTable pdg_io("PDG98_ParticleDataTable.txt");
|
---|
21 | // ParticleDataTable* pdt;
|
---|
22 | // pdg_io >> pdt;
|
---|
23 | // in both cases IO_PDG_ParticleDataTable creates an instance of the
|
---|
24 | // ParticleDataTable which the user becomes owner of (i.e. user is
|
---|
25 | // responsible for deleting)
|
---|
26 | //
|
---|
27 | // Note the PDG table does not include antiparticles nor quarks (except top)
|
---|
28 | // You can make anti-particle entries corresponding to each charged entry with
|
---|
29 | // the method make_antiparticles_from_particles() and you can make default
|
---|
30 | // entries for the 6 quarks + anti-quarks with the method add_quarks_to_table()
|
---|
31 | // Continuing with the above example:
|
---|
32 | // pdt->make_antiparticles_from_particles();
|
---|
33 | // pdg_io.add_quarks_to_table( *pdt );
|
---|
34 | //
|
---|
35 |
|
---|
36 | #include "IO_BaseClass.h"
|
---|
37 | #include <fstream>
|
---|
38 |
|
---|
39 | namespace HepMC {
|
---|
40 |
|
---|
41 | class GenEvent;
|
---|
42 |
|
---|
43 | //! an example ParticleDataTable IO method
|
---|
44 |
|
---|
45 | ///
|
---|
46 | /// \class IO_PDG_ParticleDataTable
|
---|
47 | /// Example of reading from file PDG98_ParticleDataTable.txt
|
---|
48 | ///
|
---|
49 | class IO_PDG_ParticleDataTable : public IO_BaseClass {
|
---|
50 | public:
|
---|
51 | /// constructor using filename
|
---|
52 | IO_PDG_ParticleDataTable( const char* filename
|
---|
53 | ="PDG98_ParticleDataTable.txt" );
|
---|
54 | virtual ~IO_PDG_ParticleDataTable();
|
---|
55 | /// read the input and fill the table
|
---|
56 | bool fill_particle_data_table( ParticleDataTable* );
|
---|
57 | /// add u, d, s, c, b, and t
|
---|
58 | void add_quarks_to_table( ParticleDataTable& );
|
---|
59 | /// write to ostr
|
---|
60 | void print( std::ostream& ostr = std::cout ) const;
|
---|
61 |
|
---|
62 | /// check the IO state
|
---|
63 | int rdstate() const { return (int)m_file.rdstate(); }
|
---|
64 | protected: // for internal use only
|
---|
65 | /// for internal use
|
---|
66 | bool search_for_key_end( std::istream& in, const char* key );
|
---|
67 | /// read a line
|
---|
68 | void read_entry( ParticleDataTable* );
|
---|
69 | private: // following are not implemented
|
---|
70 | void write_event( const GenEvent* ){}
|
---|
71 | bool fill_next_event( GenEvent* ){ return false; }
|
---|
72 | void write_particle_data_table( const ParticleDataTable* ){}
|
---|
73 | private: // use of copy constructor is not allowed
|
---|
74 | IO_PDG_ParticleDataTable( const IO_PDG_ParticleDataTable& ) :
|
---|
75 | IO_BaseClass() {}
|
---|
76 | private: // member data
|
---|
77 | std::string m_filename;
|
---|
78 | std::ifstream m_file;
|
---|
79 | };
|
---|
80 |
|
---|
81 | //////////////
|
---|
82 | // Inlines //
|
---|
83 | //////////////
|
---|
84 |
|
---|
85 | inline void IO_PDG_ParticleDataTable::print( std::ostream& ostr ) const {
|
---|
86 | ostr << "IO_PDG_ParticleDataTable: for computer readable PDG tables.\n"
|
---|
87 | << " file state: " << m_file.rdstate()
|
---|
88 | << " bad:" << (m_file.rdstate()&std::ios::badbit)
|
---|
89 | << " eof:" << (m_file.rdstate()&std::ios::eofbit)
|
---|
90 | << " fail:" << (m_file.rdstate()&std::ios::failbit)
|
---|
91 | << " good:" << (m_file.rdstate()&std::ios::goodbit) << std::endl;
|
---|
92 | }
|
---|
93 |
|
---|
94 | } // HepMC
|
---|
95 |
|
---|
96 | #endif // HEPMC_IO_BASECLASS_H
|
---|
97 | //--------------------------------------------------------------------------
|
---|
98 |
|
---|
99 |
|
---|
100 |
|
---|
101 |
|
---|
102 |
|
---|
103 |
|
---|
104 |
|
---|