CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_2_7_hltpatch2/src/GeneratorInterface/ThePEGInterface/plugins/ThePEGHadronizer.cc

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 &params);
00025         virtual ~ThePEGHadronizer();
00026 
00027         bool readSettings( int ) { return true; }
00028         bool initializeForInternalPartons();
00029 //      bool initializeForExternalPartons();
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 //      bool hadronize();
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