hepmc - Blame information for rev 432
Subversion Repositories:
| 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 | //-------------------------------------------------------------------------- |
