00001 #ifndef gen_Pythia6Hadronizer_h 00002 #define gen_Pythia6Hadronizer_h 00003 00004 // -*- C++ -*- 00005 00006 // class Pythia6Hadronizer is an example of a class that models the 00007 // Hadronizer concept. 00008 00009 #include <memory> 00010 00011 #include <boost/shared_ptr.hpp> 00012 00013 #include "FWCore/ParameterSet/interface/ParameterSetfwd.h" 00014 00015 #include "GeneratorInterface/Core/interface/BaseHadronizer.h" 00016 00017 namespace lhef 00018 { 00019 class LHERunInfo; 00020 class LHEEvent; 00021 } 00022 00023 class LHEEventProduct; 00024 00025 namespace HepMC 00026 { 00027 class GenEvent; 00028 } 00029 00030 00031 namespace gen 00032 { 00033 00034 class Pythia6Service; 00035 class JetMatching; 00036 00037 class Pythia6Hadronizer : public BaseHadronizer 00038 { 00039 00040 public: 00041 Pythia6Hadronizer(edm::ParameterSet const& ps); 00042 ~Pythia6Hadronizer(); 00043 00044 // bool generatePartons(); 00045 bool generatePartonsAndHadronize(); 00046 bool hadronize(); 00047 bool decay(); 00048 bool residualDecay(); 00049 bool readSettings( int ); 00050 bool initializeForExternalPartons(); 00051 bool initializeForInternalPartons(); 00052 bool declareStableParticles( const std::vector<int> ); 00053 bool declareSpecialSettings( const std::vector<std::string> ); 00054 00055 static JetMatching* getJetMatching() { return fJetMatching; } 00056 00057 void finalizeEvent(); 00058 00059 void statistics(); 00060 00061 const char* classname() const; 00062 00063 private: 00064 // methods 00065 // 00066 void flushTmpStorage(); 00067 void fillTmpStorage(); 00068 00069 void imposeProperTime(); 00070 00071 // data members 00072 // 00073 00074 Pythia6Service* fPy6Service; 00075 00076 // some of the following params are common for all generators(interfaces) 00077 // probably better to wrap them up in a class and reuse ? 00078 // (the event/run pointers are already moved to BaseHadronizer) 00079 // 00080 enum { PP, PPbar, ElectronPositron, ElectronProton, PositronProton }; 00081 00082 int fInitialState ; // pp, ppbar, e-e+, or e-p 00083 double fCOMEnergy ; // this one is irrelevant for setting py6 as hadronizer 00084 // or if anything, it should be picked up from LHERunInfoProduct ! 00085 double fBeam1PZ; 00086 double fBeam2PZ; 00087 00088 static JetMatching* fJetMatching; 00089 00090 bool fHepMCVerbosity; 00091 unsigned int fMaxEventsToPrint ; 00092 00093 // this is the only one specific to Pythia6 00094 // 00095 unsigned int fPythiaListVerbosity ; 00096 bool fDisplayPythiaBanner; 00097 bool fDisplayPythiaCards; 00098 00099 // these two params control stop- and r-handron features, 00100 // that are "custom" add-ons to Py6; 00101 // I doubt they should drag along Py6Int main library... 00102 // 00103 bool fStopHadronsEnabled; 00104 bool fGluinoHadronsEnabled; 00105 00106 // this is a "trick" to generate enriched mu-samples and the likes 00107 bool fImposeProperTime; 00108 00109 // and final touch - conversion of Py6 PID's into PDG convension 00110 bool fConvertToPDG; 00111 00112 // tmp stuff, to deal with EvtGen corrupting pyjets 00113 // int NPartsBeforeDecays; 00114 00115 }; 00116 } 00117 00118 #endif