hepmc - Blame information for rev 103

Subversion Repositories:
Rev:
Rev Author Line No. Line
2 garren 1
  1. //////////////////////////////////////////////////////////////////////////
2
  • // Matt.Dobbs@Cern.CH, December 1999
  • 3
  • // November 2000, updated to use Pythia 6.1
  • 4
  • // example of generating events with Pythia
  • 5
  • // using HepMC/PythiaWrapper.h
  • 6
  • // Events are read into the HepMC event record from the FORTRAN HEPEVT
  • 7
  • // common block using the IO_HEPEVT strategy and then a very simple event
  • 8
  • // selection is performed.
  • 9
  • //////////////////////////////////////////////////////////////////////////
  • 10
  • // To Compile: go to the HepMC directory and type:
  • 11
  • // gmake examples/example_MyPythiaWithEventSelection.exe
  • 12
  • //
  • 13
  • // See comments in examples/example_MyPythia.cxx regarding the HEPEVT wrapper.
  • 14
  • //
  • 15  
    16
  • #include <iostream>
  • 17
  • #include "HepMC/PythiaWrapper.h"
  • 18
  • #include "HepMC/IO_HEPEVT.h"
  • 19
  • #include "HepMC/GenEvent.h"
  • 76 garren 20
  • #include "PythiaHelper.h"
  • 2 garren 21  
    65 garren 22  
    23
  • //! example class
  • 24  
    25
  • /// \class  IsGoodEventMyPythia
  • 26
  • /// event selection predicate. returns true if the event contains
  • 27
  • /// a photon with pT > 25 GeV
  • 28
  • class IsGoodEventMyPythia {
  • 2 garren 29
  • public:
  • 65 garren 30
  •     /// returns true if event is "good"
  • 2 garren 31
  •     bool operator()( const HepMC::GenEvent* evt ) {
  • 32
  •         for ( HepMC::GenEvent::particle_const_iterator p
  • 33
  •                   = evt->particles_begin(); p != evt->particles_end(); ++p ){
  • 34
  •             if ( (*p)->pdg_id() == 22 && (*p)->momentum().perp() > 25. ) {
  • 35
  •                 //std::cout << "Event " << evt->event_number()
  • 36
  •                 //     << " is a good event." << std::endl;
  • 37
  •                 //(*p)->print();
  • 38
  •                 return 1;
  • 39
  •             }
  • 40
  •         }
  • 41
  •         return 0;
  • 42
  •     }
  • 43
  • };
  • 44  
    45
  • int main() {
  • 46
  •     //
  • 47
  •     //........................................HEPEVT
  • 48
  •     // Pythia 6.1 uses HEPEVT with 4000 entries and 8-byte floating point
  • 49
  •     //  numbers. We need to explicitly pass this information to the
  • 50
  •     //  HEPEVT_Wrapper.
  • 51
  •     //
  • 52
  •     HepMC::HEPEVT_Wrapper::set_max_number_entries(4000);
  • 53
  •     HepMC::HEPEVT_Wrapper::set_sizeof_real(8);
  • 54
  •     // 
  • 55
  •     //........................................PYTHIA INITIALIZATIONS
  • 76 garren 56
  •     initPythia();
  • 2 garren 57
  •     //
  • 58
  •     //........................................HepMC INITIALIZATIONS
  • 59
  •     // Instantiate an IO strategy for reading from HEPEVT.
  • 60
  •     HepMC::IO_HEPEVT hepevtio;
  • 61
  •     // declare an instance of the event selection predicate
  • 65 garren 62
  •     IsGoodEventMyPythia is_good_event;
  • 2 garren 63
  •     //........................................EVENT LOOP
  • 64
  •     int icount=0;
  • 65
  •     int num_good_events=0;
  • 66
  •     for ( int i = 1; i <= 100; i++ ) {
  • 67
  •         icount++;
  • 68
  •         if ( i%50==1 ) std::cout << "Processing Event Number "
  • 69
  •                                  << i << std::endl;
  • 70
  •         call_pyevnt(); // generate one event with Pythia
  • 71
  •         // pythia pyhepc routine convert common PYJETS in common HEPEVT
  • 72
  •         call_pyhepc( 1 );
  • 73
  •         HepMC::GenEvent* evt = hepevtio.read_next_event();
  • 103 garren 74
  •         // set number of multi parton interactions
  • 75
  •         evt->set_mpi( pypars.msti[31-1] );
  • 2 garren 76
  •         // do event selection
  • 77
  •         if ( is_good_event(evt) ) ++num_good_events;
  • 78
  •         // we also need to delete the created event from memory
  • 79
  •         delete evt;
  • 80
  •     }
  • 81
  •     //........................................TERMINATION
  • 82
  •     // write out some information from Pythia to the screen
  • 83
  •     call_pystat( 1 );    
  • 84
  •     //........................................PRINT RESULTS
  • 85
  •     std::cout << num_good_events << " out of " << icount
  • 86
  •               << " processed events passed the cuts. Finished." << std::endl;
  • 87
  •     return 0;
  • 88
  • }
  • 89  
    90  
    91