CMS 3D CMS Logo

List of all members | Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | Static Private Attributes
gen::BaseHadronizer Class Reference

#include <BaseHadronizer.h>

Inheritance diagram for gen::BaseHadronizer:
gen::AMPTHadronizer gen::Cascade2Hadronizer gen::ExhumeHadronizer gen::HijingHadronizer gen::Hydjet2Hadronizer gen::HydjetHadronizer gen::PomwigHadronizer gen::Py8InterfaceBase gen::PyquenHadronizer gen::Pythia6Hadronizer gen::ReggeGribovPartonMCHadronizer gen::ReggeGribovPartonMCHadronizer Herwig6Hadronizer Herwig7Hadronizer SherpaHadronizer

Public Member Functions

 BaseHadronizer (edm::ParameterSet const &ps)
 
void cleanLHE ()
 
void generateLHE (edm::LuminosityBlock const &lumi, CLHEP::HepRandomEngine *rengine, unsigned int ncpu)
 
edm::EventgetEDMEvent () const
 
std::unique_ptr< HepMC::GenEventgetGenEvent ()
 
std::unique_ptr< GenEventInfoProductgetGenEventInfo ()
 
virtual std::unique_ptr< GenLumiInfoHeadergetGenLumiInfoHeader () const
 
GenRunInfoProductgetGenRunInfo ()
 
std::unique_ptr< lhef::LHEEventgetLHEEvent ()
 
const std::shared_ptr< lhef::LHERunInfo > & getLHERunInfo () const
 
const std::string & gridpackPath () const
 
int randomIndex () const
 
const std::string & randomInitConfigDescription () const
 
void randomizeIndex (edm::LuminosityBlock const &lumi, CLHEP::HepRandomEngine *rengine)
 
void resetEvent (std::unique_ptr< HepMC::GenEvent > event)
 
void resetEventInfo (std::unique_ptr< GenEventInfoProduct > eventInfo)
 
virtual bool select (HepMC::GenEvent *) const
 
void setEDMEvent (edm::Event &event)
 
void setLHEEvent (std::unique_ptr< lhef::LHEEvent > event)
 
void setLHERunInfo (std::unique_ptr< lhef::LHERunInfo > runInfo)
 
void setRandomEngine (CLHEP::HepRandomEngine *v)
 
std::vector< std::string > const & sharedResources () const
 
virtual ~BaseHadronizer ()(false)
 

Protected Member Functions

std::unique_ptr< HepMC::GenEvent > & event ()
 
std::unique_ptr< GenEventInfoProduct > & eventInfo ()
 
lhef::LHEEventlheEvent ()
 
lhef::LHERunInfolheRunInfo ()
 
GenRunInfoProductrunInfo ()
 

Protected Attributes

std::string lheFile_
 
int randomIndex_
 

Private Member Functions

virtual void doSetRandomEngine (CLHEP::HepRandomEngine *v)
 
virtual std::vector< std::string > const & doSharedResources () const
 

Private Attributes

edm::EventedmEvent_
 
std::unique_ptr< HepMC::GenEventgenEvent_
 
std::unique_ptr< GenEventInfoProductgenEventInfo_
 
GenRunInfoProduct genRunInfo_
 
std::vector< std::string > gridpackPaths_
 
std::unique_ptr< lhef::LHEEventlheEvent_
 
std::shared_ptr< lhef::LHERunInfolheRunInfo_
 
std::vector< std::string > randomInitConfigDescriptions_
 
std::vector< double > randomInitWeights_
 

Static Private Attributes

static const std::vector< std::string > theSharedResources
 

Detailed Description

Definition at line 46 of file BaseHadronizer.h.

Constructor & Destructor Documentation

gen::BaseHadronizer::BaseHadronizer ( edm::ParameterSet const &  ps)

Definition at line 12 of file BaseHadronizer.cc.

References edm::ParameterSet::exists(), edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), gridpackPaths_, randomInitConfigDescriptions_, randomInitWeights_, runInfo(), GenRunInfoProduct::setExternalXSecLO(), GenRunInfoProduct::setExternalXSecNLO(), GenRunInfoProduct::setFilterEfficiency(), and AlCaHLTBitMon_QueryRunRegistry::string.

12  : randomIndex_(-1), gridpackPaths_(1) {
13  if (ps.exists("RandomizedParameters")) {
14  std::vector<edm::ParameterSet> randomizedParameters =
15  ps.getParameter<std::vector<edm::ParameterSet> >("RandomizedParameters");
16  randomInitWeights_.resize(randomizedParameters.size());
17  randomInitConfigDescriptions_.resize(randomizedParameters.size());
18  gridpackPaths_.resize(randomizedParameters.size());
19  for (unsigned int irand = 0; irand < randomizedParameters.size(); ++irand) {
20  randomInitWeights_[irand] = randomizedParameters[irand].getParameter<double>("ConfigWeight");
21  if (randomizedParameters[irand].exists("ConfigDescription")) {
23  randomizedParameters[irand].getParameter<std::string>("ConfigDescription");
24  }
25  if (randomizedParameters[irand].exists("GridpackPath")) {
26  gridpackPaths_[irand] = randomizedParameters[irand].getParameter<std::string>("GridpackPath");
27  }
28  }
29  } else {
30  if (ps.exists("GridpackPath")) {
31  gridpackPaths_[0] = ps.getParameter<std::string>("GridpackPath");
32  }
33  }
34 
35  runInfo().setFilterEfficiency(ps.getUntrackedParameter<double>("filterEfficiency", -1.));
36  runInfo().setExternalXSecLO(GenRunInfoProduct::XSec(ps.getUntrackedParameter<double>("crossSection", -1.)));
37  runInfo().setExternalXSecNLO(GenRunInfoProduct::XSec(ps.getUntrackedParameter<double>("crossSectionNLO", -1.)));
38  }
std::vector< double > randomInitWeights_
void setFilterEfficiency(double effic)
GenRunInfoProduct & runInfo()
std::vector< std::string > gridpackPaths_
std::vector< std::string > randomInitConfigDescriptions_
void setExternalXSecNLO(const XSec &xsec)
void setExternalXSecLO(const XSec &xsec)
virtual gen::BaseHadronizer::~BaseHadronizer ( )
inlinevirtual

Definition at line 49 of file BaseHadronizer.h.

49 {}

Member Function Documentation

void gen::BaseHadronizer::cleanLHE ( )

Definition at line 137 of file BaseHadronizer.cc.

References lheFile_, and MatrixUtil::remove().

137  {
138  if (lheFile_.empty()) {
139  return;
140  }
141 
142  std::remove(lheFile_.c_str());
143  }
std::string lheFile_
def remove(d, key, TELL=False)
Definition: MatrixUtil.py:212
virtual void gen::BaseHadronizer::doSetRandomEngine ( CLHEP::HepRandomEngine *  v)
inlineprivatevirtual
virtual std::vector<std::string> const& gen::BaseHadronizer::doSharedResources ( ) const
inlineprivatevirtual
std::unique_ptr<HepMC::GenEvent>& gen::BaseHadronizer::event ( )
inlineprotected

Definition at line 86 of file BaseHadronizer.h.

Referenced by gen::PomwigHadronizer::decay(), gen::PomwigHadronizer::finalizeEvent(), gen::Cascade2Hadronizer::finalizeEvent(), gen::Py8GunBase::finalizeEvent(), SherpaHadronizer::finalizeEvent(), gen::ExhumeHadronizer::finalizeEvent(), Herwig7Hadronizer::finalizeEvent(), gen::Pythia6Hadronizer::finalizeEvent(), Pythia8Hadronizer::finalizeEvent(), Herwig6Hadronizer::finalizeEvent(), gen::Py8PtGun::generatePartonsAndHadronize(), gen::Py8EGun::generatePartonsAndHadronize(), gen::Py8JetGun::generatePartonsAndHadronize(), gen::HijingHadronizer::generatePartonsAndHadronize(), gen::PomwigHadronizer::generatePartonsAndHadronize(), gen::PyquenHadronizer::generatePartonsAndHadronize(), gen::AMPTHadronizer::generatePartonsAndHadronize(), gen::HydjetHadronizer::generatePartonsAndHadronize(), gen::Cascade2Hadronizer::generatePartonsAndHadronize(), gen::ExhumeHadronizer::generatePartonsAndHadronize(), gen::Pythia6Hadronizer::generatePartonsAndHadronize(), Herwig7Hadronizer::generatePartonsAndHadronize(), gen::Hydjet2Hadronizer::generatePartonsAndHadronize(), Pythia8Hadronizer::generatePartonsAndHadronize(), gen::ReggeGribovPartonMCHadronizer::generatePartonsAndHadronize(), gen::Pythia6Hadronizer::hadronize(), Pythia8Hadronizer::hadronize(), Herwig6Hadronizer::hadronize(), gen::Cascade2Hadronizer::imposeProperTime(), gen::Pythia6Hadronizer::imposeProperTime(), Herwig6Hadronizer::pythiaStatusCodes(), gen::Cascade2Hadronizer::residualDecay(), gen::Py8GunBase::residualDecay(), gen::Pythia6Hadronizer::residualDecay(), and Pythia8Hadronizer::residualDecay().

86 { return genEvent_; }
std::unique_ptr< HepMC::GenEvent > genEvent_
std::unique_ptr<GenEventInfoProduct>& gen::BaseHadronizer::eventInfo ( )
inlineprotected
void gen::BaseHadronizer::generateLHE ( edm::LuminosityBlock const &  lumi,
CLHEP::HepRandomEngine *  rengine,
unsigned int  ncpu 
)

Definition at line 69 of file BaseHadronizer.cc.

References writedatasetfile::args, begin, constexpr, relativeConstraints::empty, Exception, edm::FileInPath::fullPath(), edm::pset::Registry::getMapped(), gridpackPath(), edm::LuminosityBlockBase::id(), edm::pset::Registry::instance(), lheFile_, edm::LuminosityBlockID::luminosityBlock(), cmsHarvester::nevents, SiStripCommissioningSource_FromRAW_cfg::outfilename, edm::LuminosityBlock::processHistory(), edm::ProcessHistory::rbegin(), edm::LuminosityBlockID::run(), and mps_update::status.

71  {
72  if (gridpackPath().empty()) {
73  return;
74  }
75 
76  //get random seed from HepRandomEngine state plus run and lumi section numbers
77  //(random engine state will be the same for every lumi section in a job)
78  std::vector<long unsigned int> seeds = rengine->put();
79  seeds.push_back(lumi.id().run());
80  seeds.push_back(lumi.id().luminosityBlock());
81  std::seed_seq seedseq(seeds.begin(), seeds.end());
82  std::array<unsigned int, 1> lheseed;
83  seedseq.generate(lheseed.begin(), lheseed.end());
84 
85  constexpr unsigned int maxseed = 30081 * 30081; //madgraph cannot handle seeds larger than this
86  unsigned int seedval = lheseed[0] % (maxseed + 1);
87 
88  unsigned int nevents = edm::pset::Registry::instance()
89  ->getMapped(lumi.processHistory().rbegin()->parameterSetID())
90  ->getParameter<edm::ParameterSet>("@main_input")
91  .getUntrackedParameter<unsigned int>("numberEventsInLuminosityBlock");
92 
93  std::ostringstream nevStream;
94  nevStream << nevents;
95 
96  std::ostringstream randomStream;
97  randomStream << seedval;
98 
99  edm::FileInPath script("GeneratorInterface/LHEInterface/data/run_generic_tarball_cvmfs.sh");
100  const char* outfilename = "cmsgrid_final.lhe";
101 
102  std::array<std::string, 5> argStrs;
103  argStrs[0] = script.fullPath();
104  argStrs[1] = gridpackPath();
105  argStrs[2] = nevStream.str();
106  argStrs[3] = randomStream.str();
107  argStrs[4] = std::to_string(ncpu);
108  std::array<char*, 6> args{
109  {&argStrs[0][0], &argStrs[1][0], &argStrs[2][0], &argStrs[3][0], &argStrs[4][0], nullptr}};
110 
111  pid_t pid = fork();
112 
113  if (pid == -1) {
114  // error, failed to fork()
115  throw cms::Exception("BaseHadronizer::generateLHE") << "Unable to fork a child";
116  } else if (pid == 0) {
117  //child
118  execvp(args[0], std::begin(args));
119  _exit(1); // exec never returns
120  } else {
121  //parent
122  int status;
123  waitpid(pid, &status, 0);
124  if (status) {
125  throw cms::Exception("BaseHadronizer::generateLHE") << "Failed to execute script";
126  }
127  }
128  FILE* lhef = std::fopen(outfilename, "r");
129  if (!lhef) {
130  throw cms::Exception("BaseHadronizer::generateLHE") << "Output file " << outfilename << " not found.";
131  }
132  std::fclose(lhef);
133 
135  }
std::string lheFile_
bool getMapped(key_type const &k, value_type &result) const
Definition: Registry.cc:17
#define begin
Definition: vmac.h:32
const std::string & gridpackPath() const
#define constexpr
static Registry * instance()
Definition: Registry.cc:12
edm::Event& gen::BaseHadronizer::getEDMEvent ( ) const
inline
std::unique_ptr<HepMC::GenEvent> gen::BaseHadronizer::getGenEvent ( )
inline

Definition at line 53 of file BaseHadronizer.h.

References eostools::move().

53 { return std::move(genEvent_); }
std::unique_ptr< HepMC::GenEvent > genEvent_
def move(src, dest)
Definition: eostools.py:511
std::unique_ptr<GenEventInfoProduct> gen::BaseHadronizer::getGenEventInfo ( )
inline

Definition at line 54 of file BaseHadronizer.h.

References eostools::move().

54 { return std::move(genEventInfo_); }
std::unique_ptr< GenEventInfoProduct > genEventInfo_
def move(src, dest)
Definition: eostools.py:511
std::unique_ptr< GenLumiInfoHeader > gen::BaseHadronizer::getGenLumiInfoHeader ( ) const
virtual

Reimplemented in Pythia8Hadronizer, Herwig7Hadronizer, and SherpaHadronizer.

Definition at line 40 of file BaseHadronizer.cc.

References nano_cff::genLumiInfoHeader, randomIndex_, and randomInitConfigDescription().

40  {
41  auto genLumiInfoHeader = std::make_unique<GenLumiInfoHeader>();
42 
43  //fill information on randomized configs for parameter scans
44  genLumiInfoHeader->setRandomConfigIndex(randomIndex_);
45  if (randomIndex_ >= 0) {
46  genLumiInfoHeader->setConfigDescription(randomInitConfigDescription());
47  }
48 
49  return genLumiInfoHeader;
50  }
genLumiInfoHeader
Definition: nano_cff.py:98
const std::string & randomInitConfigDescription() const
GenRunInfoProduct& gen::BaseHadronizer::getGenRunInfo ( )
inline

Definition at line 52 of file BaseHadronizer.h.

52 { return genRunInfo_; }
GenRunInfoProduct genRunInfo_
std::unique_ptr<lhef::LHEEvent> gen::BaseHadronizer::getLHEEvent ( )
inline

Definition at line 56 of file BaseHadronizer.h.

References eostools::move().

56 { return std::move(lheEvent_); }
std::unique_ptr< lhef::LHEEvent > lheEvent_
def move(src, dest)
Definition: eostools.py:511
const std::shared_ptr<lhef::LHERunInfo>& gen::BaseHadronizer::getLHERunInfo ( ) const
inline

Definition at line 62 of file BaseHadronizer.h.

62 { return lheRunInfo_; }
std::shared_ptr< lhef::LHERunInfo > lheRunInfo_
const std::string& gen::BaseHadronizer::gridpackPath ( ) const
inline

Definition at line 78 of file BaseHadronizer.h.

References SiStripPI::max.

Referenced by generateLHE().

lhef::LHEEvent* gen::BaseHadronizer::lheEvent ( )
inlineprotected
lhef::LHERunInfo* gen::BaseHadronizer::lheRunInfo ( )
inlineprotected
int gen::BaseHadronizer::randomIndex ( ) const
inline

Definition at line 76 of file BaseHadronizer.h.

Referenced by gen::Py8InterfaceBase::readSettings().

76 { return randomIndex_; }
const std::string& gen::BaseHadronizer::randomInitConfigDescription ( ) const
inline

Definition at line 77 of file BaseHadronizer.h.

Referenced by getGenLumiInfoHeader().

std::vector< std::string > randomInitConfigDescriptions_
void gen::BaseHadronizer::randomizeIndex ( edm::LuminosityBlock const &  lumi,
CLHEP::HepRandomEngine *  rengine 
)

Definition at line 52 of file BaseHadronizer.cc.

References edm::LuminosityBlockBase::id(), edm::LuminosityBlockID::luminosityBlock(), randomIndex_, randomInitWeights_, and edm::LuminosityBlockID::run().

52  {
53  if (!randomInitWeights_.empty()) {
54  //randomly select from a list of provided configuration sets (for parameter scans)
55 
56  //seeds std 32-bit mersene twister with HepRandomEngine state plus run and lumi section numbers
57  //(random engine state will be the same for every lumi section in a job)
58  std::vector<long unsigned int> seeds = rengine->put();
59  seeds.push_back(lumi.id().run());
60  seeds.push_back(lumi.id().luminosityBlock());
61  std::seed_seq seedseq(seeds.begin(), seeds.end());
62  std::mt19937 randgen(seedseq);
63  std::discrete_distribution<int> randdist(randomInitWeights_.begin(), randomInitWeights_.end());
64 
65  randomIndex_ = randdist(randgen);
66  }
67  }
std::vector< double > randomInitWeights_
void gen::BaseHadronizer::resetEvent ( std::unique_ptr< HepMC::GenEvent event)
inline

Definition at line 58 of file BaseHadronizer.h.

References eostools::move().

Referenced by SherpaHadronizer::generatePartonsAndHadronize().

std::unique_ptr< HepMC::GenEvent > genEvent_
def move(src, dest)
Definition: eostools.py:511
Definition: event.py:1
void gen::BaseHadronizer::resetEventInfo ( std::unique_ptr< GenEventInfoProduct eventInfo)
inline

Definition at line 59 of file BaseHadronizer.h.

References eostools::move().

std::unique_ptr< GenEventInfoProduct > genEventInfo_
std::unique_ptr< GenEventInfoProduct > & eventInfo()
def move(src, dest)
Definition: eostools.py:511
GenRunInfoProduct& gen::BaseHadronizer::runInfo ( )
inlineprotected
virtual bool gen::BaseHadronizer::select ( HepMC::GenEvent ) const
inlinevirtual

Reimplemented in gen::PyquenHadronizer.

Definition at line 70 of file BaseHadronizer.h.

70 { return true; }
void gen::BaseHadronizer::setEDMEvent ( edm::Event event)
inline

Definition at line 68 of file BaseHadronizer.h.

References event().

68 { edmEvent_ = &event; }
edm::Event * edmEvent_
std::unique_ptr< HepMC::GenEvent > & event()
void gen::BaseHadronizer::setLHEEvent ( std::unique_ptr< lhef::LHEEvent event)
inline

Definition at line 65 of file BaseHadronizer.h.

References eostools::move().

std::unique_ptr< lhef::LHEEvent > lheEvent_
def move(src, dest)
Definition: eostools.py:511
Definition: event.py:1
void gen::BaseHadronizer::setLHERunInfo ( std::unique_ptr< lhef::LHERunInfo runInfo)
inline

Definition at line 64 of file BaseHadronizer.h.

References eostools::move().

GenRunInfoProduct & runInfo()
std::shared_ptr< lhef::LHERunInfo > lheRunInfo_
def move(src, dest)
Definition: eostools.py:511
void gen::BaseHadronizer::setRandomEngine ( CLHEP::HepRandomEngine *  v)
inline

Definition at line 72 of file BaseHadronizer.h.

Referenced by CMS_SHERPA_RNG::CMS_SHERPA_RNG().

72 { doSetRandomEngine(v); }
double v[5][pyjets_maxn]
virtual void doSetRandomEngine(CLHEP::HepRandomEngine *v)
std::vector<std::string> const& gen::BaseHadronizer::sharedResources ( ) const
inline

Definition at line 74 of file BaseHadronizer.h.

74 { return doSharedResources(); }
virtual std::vector< std::string > const & doSharedResources() const

Member Data Documentation

edm::Event* gen::BaseHadronizer::edmEvent_
private

Definition at line 106 of file BaseHadronizer.h.

std::unique_ptr<HepMC::GenEvent> gen::BaseHadronizer::genEvent_
private

Definition at line 100 of file BaseHadronizer.h.

std::unique_ptr<GenEventInfoProduct> gen::BaseHadronizer::genEventInfo_
private

Definition at line 101 of file BaseHadronizer.h.

GenRunInfoProduct gen::BaseHadronizer::genRunInfo_
private

Definition at line 99 of file BaseHadronizer.h.

std::vector<std::string> gen::BaseHadronizer::gridpackPaths_
private

Definition at line 112 of file BaseHadronizer.h.

Referenced by BaseHadronizer().

std::unique_ptr<lhef::LHEEvent> gen::BaseHadronizer::lheEvent_
private

Definition at line 104 of file BaseHadronizer.h.

std::string gen::BaseHadronizer::lheFile_
protected
std::shared_ptr<lhef::LHERunInfo> gen::BaseHadronizer::lheRunInfo_
private

Definition at line 103 of file BaseHadronizer.h.

int gen::BaseHadronizer::randomIndex_
protected

Definition at line 91 of file BaseHadronizer.h.

Referenced by getGenLumiInfoHeader(), and randomizeIndex().

std::vector<std::string> gen::BaseHadronizer::randomInitConfigDescriptions_
private

Definition at line 111 of file BaseHadronizer.h.

Referenced by BaseHadronizer().

std::vector<double> gen::BaseHadronizer::randomInitWeights_
private

Definition at line 110 of file BaseHadronizer.h.

Referenced by BaseHadronizer(), and randomizeIndex().

const std::vector< std::string > gen::BaseHadronizer::theSharedResources
staticprivate

Definition at line 108 of file BaseHadronizer.h.