hepmc - Blame information for rev 432

Subversion Repositories:
Rev:
Rev Author Line No. Line
2 garren 1 //--------------------------------------------------------------------------
2 #ifndef HEPMC_IO_HEPEVT_H
3 #define HEPMC_IO_HEPEVT_H
4  
5 //////////////////////////////////////////////////////////////////////////
6 // Matt.Dobbs@Cern.CH, January 2000, 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 // HEPEVT IO class
11 //////////////////////////////////////////////////////////////////////////
12 //
13 // Important note: This class uses HepMC::HEPEVT_Wrapper which is an
14 //                 interface to the fortran77 HEPEVT common block.
15 //                 The precision and number of entries in the F77 common
16 //                 block can be specified. See HepMC/HEPEVT_Wrapper.h.
17 //                 You will very likely have to specify these values for your
18 //                 application.
19 //
20 //
21  
173 garren 22 #include <map>
2 garren 23 #include <vector>
24 #include "HepMC/IO_BaseClass.h"
25 #include "HepMC/HEPEVT_Wrapper.h"
26  
27 namespace HepMC {
28  
29     class GenEvent;
30     class GenVertex;
31     class GenParticle;
32  
65 garren 33     //! HEPEVT IO class
34  
35     ///
36     /// \class  IO_HEPEVT
37     /// IO class for reading the standard HEPEVT common block.
38     ///
2 garren 39     class IO_HEPEVT : public IO_BaseClass {
40     public:
41         IO_HEPEVT();
42         virtual           ~IO_HEPEVT();
43         bool              fill_next_event( GenEvent* );
44         void              write_event( const GenEvent* );
45         void              print( std::ostream& ostr = std::cout ) const;
46  
47         // see comments below for these switches.
65 garren 48         /// default is false
2 garren 49         bool              trust_both_mothers_and_daughters() const;
65 garren 50         /// default is true
2 garren 51         bool              trust_mothers_before_daughters() const;
65 garren 52         /// default is true
2 garren 53         bool              print_inconsistency_errors() const;
270 garren 54         /// default is true
55         bool              trust_beam_particles() const;
65 garren 56         /// define mother daughter trust rules
306 garren 57         void              set_trust_mothers_before_daughters( bool b = true );
65 garren 58         /// define mother daughter trust rules
306 garren 59         void              set_trust_both_mothers_and_daughters( bool b = false );
65 garren 60         /// Since HEPEVT has bi-directional pointers, it is possible that
61         /// the mother/daughter pointers are inconsistent (though physically
62         /// speaking this should never happen). In practise it happens often.
63         /// When a conflict occurs (i.e. when mother/daughter pointers are in
64         /// disagreement, where an empty (0) pointer is not considered a
65         /// disagreement) an error is printed. These errors can be turned off
66         /// with:            myio_hepevt.set_print_inconsistency_errors(0);
67         /// but it is STRONGLY recommended that you print the HEPEVT
68         /// common and understand the inconsistency BEFORE you turn off the
69         /// errors. The messages are there for a reason [remember, there is
70         /// no message printed when the information is missing, ... only when
71         /// is it inconsistent. User beware.]
72         /// You can inspect the HEPEVT common block for inconsistencies with
73         ///   HEPEVT_Wrapper::check_hepevt_consistency()
74         ///
75         /// There is a switch controlling whether the mother pointers or
76         /// the daughters are to be trusted.
77         /// For example, in Pythia the mother information is always correctly
78         /// included, but the daughter information is often left unfilled: in
79         /// this case we want to trust the mother pointers and not necessarily
80         /// the daughters. [THIS IS THE DEFAULT]. Unfortunately the reverse
81         /// happens for the stdhep(2001) translation of Isajet, so we need
82         /// an option to toggle the choices.
306 garren 83         void              set_print_inconsistency_errors( bool b = true );
270 garren 84         /// declare whether or not beam particles exist
85         void              set_trust_beam_particles( bool b = true );
2 garren 86  
87     protected: // for internal use only
65 garren 88         /// create a GenParticle
2 garren 89         GenParticle* build_particle( int index );
65 garren 90         /// create a production vertex
2 garren 91         void build_production_vertex(
173 garren 92             int i,std::vector<HepMC::GenParticle*>& hepevt_particle, GenEvent* evt );
65 garren 93         /// create an end vertex
2 garren 94         void build_end_vertex(
173 garren 95             int i, std::vector<HepMC::GenParticle*>& hepevt_particle, GenEvent* evt );
65 garren 96         /// find this particle in the particle map
2 garren 97         int  find_in_map(
173 garren 98             const std::map<HepMC::GenParticle*,int>& m, GenParticle* p) const;
2 garren 99  
100     private: // use of copy constructor is not allowed
101         IO_HEPEVT( const IO_HEPEVT& ) : IO_BaseClass() {}
102  
103     private: // data members
104  
105         bool m_trust_mothers_before_daughters;
106         bool m_trust_both_mothers_and_daughters;
107         bool m_print_inconsistency_errors;
270 garren 108         bool m_trust_beam_particles;
2 garren 109     };
110  
111     ////////////////////////////
112     // INLINES access methods //
113     ////////////////////////////
114     inline bool IO_HEPEVT::trust_both_mothers_and_daughters() const
115     { return m_trust_both_mothers_and_daughters; }
116  
117     inline bool IO_HEPEVT::trust_mothers_before_daughters() const
118     { return m_trust_mothers_before_daughters; }
119  
120     inline bool IO_HEPEVT::print_inconsistency_errors() const
121     { return m_print_inconsistency_errors; }
122  
123     inline void IO_HEPEVT::set_trust_both_mothers_and_daughters( bool b )
124     { m_trust_both_mothers_and_daughters = b; }
125  
126     inline void IO_HEPEVT::set_trust_mothers_before_daughters( bool b )
127     { m_trust_mothers_before_daughters = b; }
128  
129     inline void IO_HEPEVT::set_print_inconsistency_errors( bool b  )
130     { m_print_inconsistency_errors = b; }
131  
270 garren 132     inline bool IO_HEPEVT::trust_beam_particles() const
133     { return m_trust_beam_particles; }
134  
135     inline void IO_HEPEVT::set_trust_beam_particles( bool b )
136     { m_trust_beam_particles = b; }
137  
2 garren 138 } // HepMC
139  
140 #endif  // HEPMC_IO_HEPEVT_H
141 //--------------------------------------------------------------------------