hepmc - Blame information for rev 65
Subversion Repositories:
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 35 | garren | 1 | //-------------------------------------------------------------------------- |
| 2 | #ifndef HEPMC_IO_ASCIIPARTICLES_H | ||
| 3 | #define HEPMC_IO_ASCIIPARTICLES_H | ||
| 4 | |||
| 5 | ////////////////////////////////////////////////////////////////////////// | ||
| 6 | // Mikhail.Kirsanov@Cern.CH, 2006 | ||
| 7 | // event input/output in ascii format for eye and machine reading | ||
| 8 | ////////////////////////////////////////////////////////////////////////// | ||
| 9 | // | ||
| 10 | // Strategy for reading or writing events/particleData as machine readable | ||
| 11 | // ascii to a file. When instantiating, the mode of file to be created | ||
| 12 | // must be specified. Options are: | ||
| 13 | // std::ios::in open file for input | ||
| 14 | // std::ios::out open file for output | ||
| 15 | // std::ios::trunc erase old file when opening (i.e. ios::out|ios::trunc | ||
| 16 | // removes oldfile, and creates a new one for output ) | ||
| 17 | // std::ios::app append output to end of file | ||
| 18 | // for the purposes of this class, simultaneous input and output mode | ||
| 19 | // ( std::ios::in | std::ios::out ) is not allowed. | ||
| 20 | // | ||
| 21 | // Event listings are preceded by the key: | ||
| 22 | // "HepMC::IO_AsciiParticles-START_EVENT_LISTING\n" | ||
| 23 | // and terminated by the key: | ||
| 24 | // "HepMC::IO_AsciiParticles-END_EVENT_LISTING\n" | ||
| 25 | // Comments are allowed. They need not be preceded by anything, though if | ||
| 26 | // a comment is written using write_comment( const string ) then it will be | ||
| 27 | // preceded by "HepMC::IO_AsciiParticles-COMMENT\n" | ||
| 28 | // Each event, vertex, particle, particle data is preceded by | ||
| 29 | // "E ","V ","P ","D " respectively. | ||
| 30 | // Comments may appear anywhere in the file -- so long as they do not contain | ||
| 31 | // any of the 4 start/stop keys. | ||
| 32 | // | ||
| 33 | |||
| 34 | #include <fstream> | ||
| 35 | #include <string> | ||
| 36 | #include <map> | ||
| 37 | #include <vector> | ||
| 38 | #include "HepMC/IO_BaseClass.h" | ||
| 39 | |||
| 40 | namespace HepMC { | ||
| 41 | |||
| 42 | class GenEvent; | ||
| 43 | class GenVertex; | ||
| 44 | class GenParticle; | ||
| 45 | |||
| 65 | garren | 46 | //! event input/output in ascii format for eye and machine reading |
| 47 | |||
| 48 | /// | ||
| 49 | /// \class IO_AsciiParticles | ||
| 50 | /// Strategy for reading or writing events/particleData as machine readable | ||
| 51 | /// ascii to a file. When instantiating, the mode of file to be created | ||
| 52 | /// must be specified. | ||
| 53 | /// | ||
| 35 | garren | 54 | class IO_AsciiParticles : public IO_BaseClass { |
| 55 | public: | ||
| 65 | garren | 56 | /// constructor requiring a file name and std::ios mode |
| 35 | garren | 57 | IO_AsciiParticles( const char* filename="IO_AsciiParticles.dat", |
| 58 | std::ios::openmode mode=std::ios::out ); | ||
| 59 | virtual ~IO_AsciiParticles(); | ||
| 60 | |||
| 65 | garren | 61 | /// write this event |
| 35 | garren | 62 | void write_event( const GenEvent* evt ); |
| 65 | garren | 63 | /// get the next event |
| 35 | garren | 64 | bool fill_next_event( GenEvent* evt ); |
| 65 | inline void write_particle_data_table(const ParticleDataTable*); | ||
| 66 | inline bool fill_particle_data_table( ParticleDataTable* ); | ||
| 65 | garren | 67 | /// insert a comment directly into the output file --- normally you |
| 68 | /// only want to do this at the beginning or end of the file. All | ||
| 69 | /// comments are preceded with "HepMC::IO_AsciiParticles-COMMENT\n" | ||
| 35 | garren | 70 | void write_comment( const std::string comment ); |
| 71 | |||
| 65 | garren | 72 | /// set output precision |
| 73 | void setPrecision(int iprec); | ||
| 35 | garren | 74 | |
| 65 | garren | 75 | int rdstate() const; //!< check the state of the IO stream |
| 76 | void clear(); //!< clear the IO stream | ||
| 35 | garren | 77 | |
| 65 | garren | 78 | /// write to ostr |
| 35 | garren | 79 | void print( std::ostream& ostr = std::cout ) const; |
| 80 | |||
| 81 | protected: // for internal use only | ||
| 65 | garren | 82 | /// write end tag |
| 35 | garren | 83 | bool write_end_listing(); |
| 84 | private: // use of copy constructor is not allowed | ||
| 85 | IO_AsciiParticles( const IO_AsciiParticles& ) : IO_BaseClass() {} | ||
| 86 | private: // data members | ||
| 87 | int m_precision; | ||
| 88 | std::ios::openmode m_mode; | ||
| 89 | std::fstream* m_file; | ||
| 90 | std::ostream* m_outstream; | ||
| 91 | bool m_finished_first_event_io; | ||
| 92 | }; | ||
| 93 | |||
| 94 | ////////////// | ||
| 95 | // Inlines // | ||
| 96 | ////////////// | ||
| 97 | |||
| 98 | inline int IO_AsciiParticles::rdstate() const { return (int)m_file->rdstate(); } | ||
| 99 | inline void IO_AsciiParticles::clear() { m_file->clear(); } | ||
| 100 | inline void IO_AsciiParticles::setPrecision(int iprec) { m_precision=iprec; } | ||
| 101 | |||
| 102 | ///////////////////// | ||
| 103 | // Inline dummies // | ||
| 104 | ///////////////////// | ||
| 105 | |||
| 106 | void IO_AsciiParticles::write_particle_data_table(const ParticleDataTable*) {;} | ||
| 107 | bool IO_AsciiParticles::fill_particle_data_table( ParticleDataTable* ) {return false;} | ||
| 108 | |||
| 109 | } // HepMC | ||
| 110 | |||
| 111 | #endif // HEPMC_IO_ASCIIPARTICLES_H | ||
| 112 | //-------------------------------------------------------------------------- |
