LCOV - code coverage report
Current view: top level - TEvtGen/HepMC - IO_HEPEVT.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 1 0.0 %
Date: 2016-06-14 17:26:59 Functions: 0 1 0.0 %

          Line data    Source code
       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             : 
      22             : #include <map>
      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             : 
      33             :     //! HEPEVT IO class
      34             : 
      35             :     ///
      36             :     /// \class  IO_HEPEVT
      37             :     /// IO class for reading the standard HEPEVT common block.
      38             :     ///
      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.
      48             :         /// default is false
      49             :         bool              trust_both_mothers_and_daughters() const;
      50             :         /// default is true
      51             :         bool              trust_mothers_before_daughters() const;
      52             :         /// default is true
      53             :         bool              print_inconsistency_errors() const;
      54             :         /// default is true
      55             :         bool              trust_beam_particles() const;
      56             :         /// define mother daughter trust rules
      57             :         void              set_trust_mothers_before_daughters( bool b = true );
      58             :         /// define mother daughter trust rules
      59             :         void              set_trust_both_mothers_and_daughters( bool b = false );
      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.
      83             :         void              set_print_inconsistency_errors( bool b = true );
      84             :         /// declare whether or not beam particles exist
      85             :         void              set_trust_beam_particles( bool b = true );
      86             : 
      87             :     protected: // for internal use only
      88             :         /// create a GenParticle
      89             :         GenParticle* build_particle( int index );
      90             :         /// create a production vertex
      91             :         void build_production_vertex( 
      92             :             int i,std::vector<HepMC::GenParticle*>& hepevt_particle, GenEvent* evt );
      93             :         /// create an end vertex
      94             :         void build_end_vertex( 
      95             :             int i, std::vector<HepMC::GenParticle*>& hepevt_particle, GenEvent* evt );
      96             :         /// find this particle in the particle map
      97             :         int  find_in_map( 
      98             :             const std::map<HepMC::GenParticle*,int>& m, GenParticle* p) const;
      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; 
     108             :         bool m_trust_beam_particles;
     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             : 
     132             :     inline bool IO_HEPEVT::trust_beam_particles() const
     133           0 :     { return m_trust_beam_particles; }
     134             : 
     135             :     inline void IO_HEPEVT::set_trust_beam_particles( bool b )
     136             :     { m_trust_beam_particles = b; }
     137             : 
     138             : } // HepMC
     139             : 
     140             : #endif  // HEPMC_IO_HEPEVT_H
     141             : //--------------------------------------------------------------------------

Generated by: LCOV version 1.11