LCOV - code coverage report
Current view: top level - TEvtGen/HepMC - IO_HERWIG.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_HERWIG_H
       3             : #define HEPMC_IO_HERWIG_H
       4             : 
       5             : //////////////////////////////////////////////////////////////////////////
       6             : // Matt.Dobbs@Cern.CH, October 2002, 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             : // IO class for reading the (non-standard) HEPEVT common block from 
      11             : //  the Herwig monte carlo program.
      12             : // Notes:
      13             : //   - The HERWIG HEPEVT common block is non-standard, primarily because it 
      14             : //     contains some color flow information. When you call IO_HERWIG, the 
      15             : //     HEPEVT common block is transformed to the standard. THIS CHANGES THE
      16             : //     CONTENT of HEPEVT!.
      17             : //   - The HERWIG HEPEVT common block has some EXTRA non-physical ENTRIES 
      18             : //     (such as CMS frame, HARD subprocess, and CONE).
      19             : //     These are removed by IO_HERWIG. Thus the HepMC event will APPEAR
      20             : //     to have fewer particles in it that herwig did.
      21             : //     There is a switch m_no_gaps_in_barcodes. For
      22             : //       true  - then the extra particles are removed from HEPEVT, with 
      23             : //               the result that the HepMC barcodes will be sequential, with 
      24             : //               no gaps.
      25             : //       false - the barcodes will correspond directly to the HEPEVT index, but
      26             : //               there will be gaps ... ie some barcodes will be unassigned.
      27             : //       this switch requested by I Hinchliffe, October 31, 2002
      28             : //   - some of the Herwig GLUON SPLITTING products are not properly documented
      29             : //     in hepevt. I was unable to repair this in a simple and robust way. 
      30             : //     Therefore some of the gluon splitting products will be orphans 
      31             : //     in the HepMC output. 
      32             : //   - Herwig uses      HEPEVT_Wrapper::set_max_number_entries(4000);
      33             : //                      HEPEVT_Wrapper::set_sizeof_real(8);
      34             : //     which are the defaults for HEPEVT_Wrapper.
      35             : //////////////////////////////////////////////////////////////////////////
      36             : //
      37             : 
      38             : #include <set>
      39             : #include <vector>
      40             : #include "HepMC/IO_BaseClass.h"
      41             : #include "HepMC/HEPEVT_Wrapper.h"
      42             : 
      43             : namespace HepMC {
      44             : 
      45             :     class GenEvent;
      46             :     class GenVertex;
      47             :     class GenParticle;
      48             : 
      49             :     //! IO_HERWIG is used to get Herwig information
      50             : 
      51             :     ///
      52             :     /// \class  IO_HERWIG
      53             :     /// IO class for reading the HEPEVT common block from 
      54             :     ///  the Herwig monte carlo program.
      55             :     ///
      56             :     class IO_HERWIG : public IO_BaseClass {
      57             :     public:
      58             :         IO_HERWIG();
      59             :         virtual           ~IO_HERWIG();
      60             :         /// get the next event
      61             :         bool              fill_next_event( GenEvent* );
      62             :         /// write to ostr
      63             :         void              print( std::ostream& ostr = std::cout ) const;
      64             :         /// this information is dubious
      65             :         double            interfaces_to_version_number() const {return 6.400;}
      66             :                 
      67             :         // see comments below for these switches.
      68             :         /// default is true
      69             :         bool              print_inconsistency_errors() const;
      70             :         /// decide whether or not to print inconsistency errors
      71             :         void              set_print_inconsistency_errors( bool b = true );
      72             : 
      73             :         /// ask how to deal with extra non-physical pseudo particles
      74             :         bool              no_gaps_in_barcodes() const 
      75             :                              { return m_no_gaps_in_barcodes; }
      76             :         /// The HERWIG HEPEVT common block has some EXTRA non-physical ENTRIES 
      77             :         /// (such as CMS frame, HARD subprocess, and CONE).
      78             :         /// These are removed by IO_HERWIG. Thus the HepMC event will APPEAR
      79             :         /// to have fewer particles in it that herwig did.
      80             :         /// There is a switch m_no_gaps_in_barcodes. For
      81             :         ///   true  - then the extra particles are removed from HEPEVT, with 
      82             :         ///             the result that the HepMC barcodes will be sequential, with 
      83             :         ///             no gaps.
      84             :         ///   false - the barcodes will correspond directly to the HEPEVT index, but
      85             :         ///             there will be gaps ... ie some barcodes will be unassigned.
      86             :         ///   this switch requested by I Hinchliffe, October 31, 2002
      87             :         void              set_no_gaps_in_barcodes( bool a ) 
      88             :                              { m_no_gaps_in_barcodes=a; }
      89             : 
      90             :     protected: // for internal use only
      91             :         /// default is true
      92             :         bool              trust_both_mothers_and_daughters() const;
      93             :         /// default is false
      94             :         bool              trust_mothers_before_daughters() const;
      95             :         /// define mother daughter trust rules
      96             :         void              set_trust_mothers_before_daughters( bool b = true );
      97             :         /// define mother daughter trust rules
      98             :         void              set_trust_both_mothers_and_daughters( bool b = false );
      99             : 
     100             :         /// make a particle
     101             :         GenParticle* build_particle( int index );
     102             :         /// make a production vertex
     103             :         void         build_production_vertex( 
     104             :             int i,std::vector<GenParticle*>& hepevt_particle, GenEvent* evt );
     105             :         /// make a decay vertex
     106             :         void         build_end_vertex( 
     107             :             int i, std::vector<GenParticle*>& hepevt_particle, GenEvent* evt );
     108             :         /// find this particle in the map
     109             :         int          find_in_map( 
     110             :             const std::map<GenParticle*,int>& m, GenParticle* p) const;
     111             : 
     112             :         /// make the HERWIG HEPEVT common block look like the standard
     113             :         void repair_hepevt() const;
     114             :         /// deal with artifacts of repairing HEPEVT
     115             :         void remove_gaps_in_hepevt() const;
     116             :         /// zero out a HEPEVT pseudo particle
     117             :         void zero_hepevt_entry( int i ) const;
     118             :         /// translate particle ID
     119             :         int  translate_herwig_to_pdg_id( int i ) const;
     120             : 
     121             :     private: // following are not implemented for Herwig
     122           0 :         virtual void write_event( const GenEvent* ){}
     123             : 
     124             :     private: // use of copy constructor is not allowed
     125             :         IO_HERWIG( const IO_HERWIG& ) : IO_BaseClass() {}
     126             : 
     127             :     private: // data members
     128             :         bool              m_trust_mothers_before_daughters;
     129             :         bool              m_trust_both_mothers_and_daughters;
     130             :         bool              m_print_inconsistency_errors; 
     131             :         bool              m_no_gaps_in_barcodes;
     132             :         std::vector<int>  m_herwig_to_pdg_id;
     133             :         std::set<int>     m_no_antiparticles;
     134             :     };
     135             : 
     136             :     ////////////////////////////
     137             :     // INLINES access methods //
     138             :     ////////////////////////////
     139             :     inline bool IO_HERWIG::trust_both_mothers_and_daughters() const 
     140             :     { return m_trust_both_mothers_and_daughters; }
     141             :         
     142             :     inline bool IO_HERWIG::trust_mothers_before_daughters() const 
     143             :     { return m_trust_mothers_before_daughters; }
     144             : 
     145             :     inline bool IO_HERWIG::print_inconsistency_errors() const
     146             :     { return m_print_inconsistency_errors; }
     147             : 
     148             :     inline void IO_HERWIG::set_trust_both_mothers_and_daughters( bool b )
     149             :     { m_trust_both_mothers_and_daughters = b; }
     150             : 
     151             :     inline void IO_HERWIG::set_trust_mothers_before_daughters( bool b )
     152             :     { m_trust_mothers_before_daughters = b; }
     153             : 
     154             :     inline void IO_HERWIG::set_print_inconsistency_errors( bool b  )
     155             :     { m_print_inconsistency_errors = b; }
     156             : 
     157             : } // HepMC
     158             : 
     159             : #endif  // HEPMC_IO_HERWIG_H
     160             : //--------------------------------------------------------------------------

Generated by: LCOV version 1.11