Go to the documentation of this file.00001 #include <memory>
00002
00003 #include <HepMC/GenEvent.h>
00004 #include <HepMC/IO_BaseClass.h>
00005
00006 #include <ThePEG/Repository/Repository.h>
00007 #include <ThePEG/EventRecord/Event.h>
00008 #include <ThePEG/Config/ThePEG.h>
00009
00010 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00011
00012 #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h"
00013 #include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h"
00014 #include "SimDataFormats/GeneratorProducts/interface/GenRunInfoProduct.h"
00015
00016 #include "GeneratorInterface/Core/interface/BaseHadronizer.h"
00017 #include "GeneratorInterface/Core/interface/GeneratorFilter.h"
00018 #include "GeneratorInterface/Core/interface/HadronizerFilter.h"
00019
00020 #include "GeneratorInterface/ThePEGInterface/interface/ThePEGInterface.h"
00021
00022 class ThePEGHadronizer : public ThePEGInterface, public gen::BaseHadronizer {
00023 public:
00024 ThePEGHadronizer(const edm::ParameterSet ¶ms);
00025 virtual ~ThePEGHadronizer();
00026
00027 bool readSettings( int ) { return true; }
00028 bool initializeForInternalPartons();
00029
00030 bool declareStableParticles(const std::vector<int> &pdgIds);
00031 bool declareSpecialSettings( const std::vector<std::string> ) { return true; }
00032
00033 void statistics();
00034
00035 bool generatePartonsAndHadronize();
00036
00037 bool decay();
00038 bool residualDecay();
00039 void finalizeEvent();
00040
00041 const char *classname() const { return "ThePEGHadronizer"; }
00042
00043 private:
00044 unsigned int eventsToPrint;
00045
00046 ThePEG::EventPtr thepegEvent;
00047 };
00048
00049 ThePEGHadronizer::ThePEGHadronizer(const edm::ParameterSet &pset) :
00050 ThePEGInterface(pset),
00051 BaseHadronizer(pset),
00052 eventsToPrint(pset.getUntrackedParameter<unsigned int>("eventsToPrint", 0))
00053 {
00054 initRepository(pset);
00055
00056 }
00057
00058 ThePEGHadronizer::~ThePEGHadronizer()
00059 {
00060 }
00061
00062 bool ThePEGHadronizer::initializeForInternalPartons()
00063 {
00064 initGenerator();
00065 return true;
00066 }
00067
00068 bool ThePEGHadronizer::declareStableParticles(const std::vector<int> &pdgIds)
00069 {
00070 return false;
00071 }
00072
00073 void ThePEGHadronizer::statistics()
00074 {
00075 runInfo().setInternalXSec(GenRunInfoProduct::XSec(
00076 eg_->integratedXSec() / ThePEG::picobarn,
00077 eg_->integratedXSecErr() / ThePEG::picobarn));
00078 }
00079
00080 bool ThePEGHadronizer::generatePartonsAndHadronize()
00081 {
00082 edm::LogInfo("Generator|ThePEGHadronizer") << "Start production";
00083
00084 flushRandomNumberGenerator();
00085
00086 thepegEvent = eg_->shoot();
00087 if (!thepegEvent) {
00088 edm::LogWarning("Generator|ThePEGHadronizer") << "thepegEvent not initialized";
00089 return false;
00090 }
00091
00092 event() = convert(thepegEvent);
00093 if (!event().get()) {
00094 edm::LogWarning("Generator|ThePEGHadronizer") << "genEvent not initialized";
00095 return false;
00096 }
00097
00098 return true;
00099 }
00100
00101 void ThePEGHadronizer::finalizeEvent()
00102 {
00103 HepMC::PdfInfo pdf;
00104 clearAuxiliary(event().get(), &pdf);
00105 fillAuxiliary(event().get(), &pdf, thepegEvent);
00106 event()->set_pdf_info(pdf);
00107
00108 eventInfo().reset(new GenEventInfoProduct(event().get()));
00109 eventInfo()->setBinningValues(
00110 std::vector<double>(1, pthat(thepegEvent)));
00111
00112 if (eventsToPrint) {
00113 eventsToPrint--;
00114 event()->print();
00115 }
00116
00117 if (iobc_.get())
00118 iobc_->write_event(event().get());
00119
00120 edm::LogInfo("Generator|ThePEGHadronizer") << "Event produced";
00121 }
00122
00123 bool ThePEGHadronizer::decay()
00124 {
00125 return true;
00126 }
00127
00128 bool ThePEGHadronizer::residualDecay()
00129 {
00130 return true;
00131 }
00132
00133 #include "GeneratorInterface/ExternalDecays/interface/ExternalDecayDriver.h"
00134
00135 typedef edm::GeneratorFilter<ThePEGHadronizer, gen::ExternalDecayDriver> ThePEGGeneratorFilter;
00136 DEFINE_FWK_MODULE(ThePEGGeneratorFilter);
00137
00138 #if 0
00139 typedef edm::HadronizerFilter<ThePEGHadronizer, gen::ExternalDecayDriver> ThePEGHadronizerFilter;
00140 DEFINE_FWK_MODULE(ThePEGHadronizerFilter);
00141 #endif