hepmc - Blame information for rev 65

Subversion Repositories:
Rev:
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 //--------------------------------------------------------------------------