File indexing completed on 2023-03-17 11:04:09
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef gen_BaseHadronizer_h
0011 #define gen_BaseHadronizer_h
0012
0013 #include <memory>
0014 #include <string>
0015 #include <vector>
0016
0017 #include <memory>
0018
0019 #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h"
0020 #include "SimDataFormats/GeneratorProducts/interface/HepMC3Product.h"
0021
0022 #include "SimDataFormats/GeneratorProducts/interface/GenRunInfoProduct.h"
0023 #include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h"
0024 #include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct3.h"
0025 #include "SimDataFormats/GeneratorProducts/interface/GenLumiInfoHeader.h"
0026
0027 #include "SimDataFormats/GeneratorProducts/interface/LHERunInfoProduct.h"
0028 #include "SimDataFormats/GeneratorProducts/interface/LHEEventProduct.h"
0029
0030 #include "GeneratorInterface/LHEInterface/interface/LHERunInfo.h"
0031 #include "GeneratorInterface/LHEInterface/interface/LHEEvent.h"
0032 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0033 #include "FWCore/Framework/interface/LuminosityBlock.h"
0034
0035 #include "CLHEP/Random/RandomEngine.h"
0036
0037
0038 namespace edm {
0039 class Event;
0040 }
0041
0042 namespace CLHEP {
0043 class HepRandomEngine;
0044 }
0045
0046 namespace gen {
0047
0048 class BaseHadronizer {
0049 public:
0050 BaseHadronizer(edm::ParameterSet const& ps);
0051 virtual ~BaseHadronizer() noexcept(false) {}
0052
0053
0054 GenRunInfoProduct& getGenRunInfo() { return genRunInfo_; }
0055 std::unique_ptr<HepMC::GenEvent> getGenEvent() { return std::move(genEvent_); }
0056 std::unique_ptr<HepMC3::GenEvent> getGenEvent3() { return std::move(genEvent3_); }
0057 std::unique_ptr<GenEventInfoProduct> getGenEventInfo() { return std::move(genEventInfo_); }
0058 std::unique_ptr<GenEventInfoProduct3> getGenEventInfo3() { return std::move(genEventInfo3_); }
0059 virtual std::unique_ptr<GenLumiInfoHeader> getGenLumiInfoHeader() const;
0060 std::unique_ptr<lhef::LHEEvent> getLHEEvent() { return std::move(lheEvent_); }
0061
0062 void resetEvent(std::unique_ptr<HepMC::GenEvent> event) { genEvent_ = std::move(event); }
0063 void resetEvent3(std::unique_ptr<HepMC3::GenEvent> event3) { genEvent3_ = std::move(event3); }
0064 void resetEventInfo(std::unique_ptr<GenEventInfoProduct> eventInfo) { genEventInfo_ = std::move(eventInfo); }
0065 void resetEventInfo3(std::unique_ptr<GenEventInfoProduct3> eventInfo) { genEventInfo3_ = std::move(eventInfo); }
0066
0067
0068 const std::shared_ptr<lhef::LHERunInfo>& getLHERunInfo() const { return lheRunInfo_; }
0069
0070 void setLHERunInfo(std::unique_ptr<lhef::LHERunInfo> runInfo) { lheRunInfo_ = std::move(runInfo); }
0071 void setLHEEvent(std::unique_ptr<lhef::LHEEvent> event) { lheEvent_ = std::move(event); }
0072
0073
0074 void setEDMEvent(edm::Event& event) { edmEvent_ = &event; }
0075 edm::Event& getEDMEvent() const { return *edmEvent_; }
0076 virtual bool select(HepMC::GenEvent*) const { return true; }
0077
0078 void setRandomEngine(CLHEP::HepRandomEngine* v) { doSetRandomEngine(v); }
0079
0080 std::vector<std::string> const& sharedResources() const { return doSharedResources(); }
0081
0082 int randomIndex() const { return randomIndex_; }
0083 const std::string& randomInitConfigDescription() const { return randomInitConfigDescriptions_[randomIndex_]; }
0084 const std::string& gridpackPath() const { return gridpackPaths_[std::max(randomIndex_, 0)]; }
0085
0086 void randomizeIndex(edm::LuminosityBlock const& lumi, CLHEP::HepRandomEngine* rengine);
0087 void generateLHE(edm::LuminosityBlock const& lumi, CLHEP::HepRandomEngine* rengine, unsigned int ncpu);
0088 void cleanLHE();
0089 unsigned int getVHepMC() { return ivhepmc; }
0090
0091 protected:
0092 unsigned int ivhepmc = 2;
0093 GenRunInfoProduct& runInfo() { return genRunInfo_; }
0094 std::unique_ptr<HepMC::GenEvent>& event() { return genEvent_; }
0095 std::unique_ptr<GenEventInfoProduct>& eventInfo() { return genEventInfo_; }
0096
0097 std::unique_ptr<HepMC3::GenEvent>& event3() { return genEvent3_; }
0098 std::unique_ptr<GenEventInfoProduct3>& eventInfo3() { return genEventInfo3_; }
0099
0100 lhef::LHEEvent* lheEvent() { return lheEvent_.get(); }
0101 lhef::LHERunInfo* lheRunInfo() { return lheRunInfo_.get(); }
0102 int randomIndex_;
0103 std::string lheFile_;
0104
0105 private:
0106 virtual void doSetRandomEngine(CLHEP::HepRandomEngine* v) {}
0107
0108 virtual std::vector<std::string> const& doSharedResources() const { return theSharedResources; }
0109
0110 GenRunInfoProduct genRunInfo_;
0111 std::unique_ptr<HepMC::GenEvent> genEvent_;
0112 std::unique_ptr<HepMC3::GenEvent> genEvent3_;
0113 std::unique_ptr<GenEventInfoProduct> genEventInfo_;
0114 std::unique_ptr<GenEventInfoProduct3> genEventInfo3_;
0115
0116 std::shared_ptr<lhef::LHERunInfo> lheRunInfo_;
0117 std::unique_ptr<lhef::LHEEvent> lheEvent_;
0118
0119 edm::Event* edmEvent_;
0120
0121 static const std::vector<std::string> theSharedResources;
0122
0123 std::vector<double> randomInitWeights_;
0124 std::vector<std::string> randomInitConfigDescriptions_;
0125 std::vector<std::string> gridpackPaths_;
0126 };
0127
0128 }
0129
0130 #endif